A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© songxing10000 中级黑马   /  2014-9-27 12:34  /  2622 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下图所示,怎么这两句实现的功能一样啊,
既然功能都一样为什么写成第一种 那么麻烦,直接一个new就行了啊
  1. Soldier *soldier1 = [[Soldier alloc]init];

  2. Soldier *soldier2 = [Soldier new];
复制代码
既然功能都一样为什么写成第一种 那么麻烦,直接一个new就行了啊
既然用
[Soldier new];能达到[[Soldier alloc]init];的功能干嘛还不直接用[Soldier new];,
非得写成[[Soldier alloc]init];这么长一段呢

然后进init里面也没什么特别的东西啊,但是发现把这个init给注释掉,
程序就变成空程序了,真是一头大




评分

参与人数 1技术分 +1 收起 理由
★彬★卍囧神 + 1 认真定,视频中有说到这个

查看全部评分

17 个回复

倒序浏览
本帖最后由 小叶子 于 2018-8-3 18:11 编辑

1111123121111

点评

大神,讲得很详细,可是我是新手,我只是想问问为什么不直接用new  发表于 2014-9-27 13:02
回复 使用道具 举报
本帖最后由 小叶子 于 2018-8-3 18:14 编辑

1111123121111

点评

还来得及吗,怎么那么多人考黑马啊  发表于 2014-9-27 15:51
回复 使用道具 举报
本帖最后由 小叶子 于 2018-8-3 18:14 编辑

1111123121111
回复 使用道具 举报
本帖最后由 小叶子 于 2018-8-3 18:11 编辑

1111123121111
回复 使用道具 举报
new方法单一,init初始化可以做用过
回复 使用道具 举报
★彬★卍囧神 发表于 2014-9-27 16:22
new方法单一,init初始化可以做用过

多谢版主,指点江山,激扬文字
回复 使用道具 举报
Lizzie 中级黑马 2014-9-27 19:55:28
8#
我的想法跟二楼差不多
回复 使用道具 举报
{:3_50:}一看就是没有认真看视频。。。
回复 使用道具 举报
开发的时候要使用 alloc init   
alloc用于分配内存,init用于初始化,开发过程中有时候需要使用带参数的初始化方法
new无法完成带参数的初始化
回复 使用道具 举报
楼主的问题正是我问题,学习了

点评

房子还可以吧  发表于 2014-9-27 22:24
回复 使用道具 举报
1.alloc是分配内存空间,init是初始化,也就是说,你创建一个对象。首先给要在内存里给分配一块地方,然后在初始化,给个初值什么的。
2.new的方法是便利构造器方法,里面其实也是封装了alloc,init方法。二者的效果是一样的,都是创建了对象,并且初始化了。
3.二者的区别,在你用MRC管理内存的时候可以感受到,你用alloc init方法创建的对象,需要手动释放,要将对象release掉,而new方法创建的对象,由于在封装的时候已经在内部标记了autorelease,因此创建之后不需要再release。


个人的一点拙见,希望会有帮助!
回复 使用道具 举报
gongxia20 发表于 2014-9-27 21:49
楼主的问题正是我问题,学习了

多谢楼主的关心,很好。有空过来坐坐

点评

正所谓有朋自远方来, 无图无真相无酒肉不厚道, 求室内高清无码大图  发表于 2014-9-28 00:15
回复 使用道具 举报
★彬★卍囧神 发表于 2014-9-27 16:22
new方法单一,init初始化可以做用过

嗯,同意囧神的观点
顺着你的思路,我再补充一下
new的话他具有局限性
说的通俗一点就是 new = alloc init
但是 new !=  alloc initWithXXX;
不知道我这么下你能看得懂不,new的话只是单纯进行了对象从分配内存空,然后初始化对象属性并返回内存地址,它不能初始化带参数的构造方法
例如 你想创建一个出生就具有年龄的person对象,用 new 显然不行吧 但是用initWithAge:(int)age 就可以创建,这也就是所谓的重写构造方法了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马