黑马程序员技术交流社区

标题: 提问:关于构造方法,求指教 [打印本页]

作者: songxing10000    时间: 2014-9-27 12:34
标题: 提问:关于构造方法,求指教
如下图所示,怎么这两句实现的功能一样啊,
既然功能都一样为什么写成第一种 那么麻烦,直接一个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给注释掉,
程序就变成空程序了,真是一头大





作者: 小叶子    时间: 2014-9-27 12:47
本帖最后由 小叶子 于 2018-8-3 18:11 编辑

1111123121111
作者: 小叶子    时间: 2014-9-27 13:05
本帖最后由 小叶子 于 2018-8-3 18:14 编辑

1111123121111
作者: 小叶子    时间: 2014-9-27 13:07
本帖最后由 小叶子 于 2018-8-3 18:14 编辑

1111123121111
作者: 小叶子    时间: 2014-9-27 16:13
本帖最后由 小叶子 于 2018-8-3 18:11 编辑

1111123121111
作者: ★彬★卍囧神    时间: 2014-9-27 16:22
new方法单一,init初始化可以做用过
作者: songxing10000    时间: 2014-9-27 16:35
★彬★卍囧神 发表于 2014-9-27 16:22
new方法单一,init初始化可以做用过

多谢版主,指点江山,激扬文字
作者: Lizzie    时间: 2014-9-27 19:55
我的想法跟二楼差不多
作者: 努力微笑    时间: 2014-9-27 20:29
{:3_50:}一看就是没有认真看视频。。。
作者: yzh0024abc    时间: 2014-9-27 21:42
开发的时候要使用 alloc init   
alloc用于分配内存,init用于初始化,开发过程中有时候需要使用带参数的初始化方法
new无法完成带参数的初始化
作者: coyote    时间: 2014-9-27 21:55
1.alloc是分配内存空间,init是初始化,也就是说,你创建一个对象。首先给要在内存里给分配一块地方,然后在初始化,给个初值什么的。
2.new的方法是便利构造器方法,里面其实也是封装了alloc,init方法。二者的效果是一样的,都是创建了对象,并且初始化了。
3.二者的区别,在你用MRC管理内存的时候可以感受到,你用alloc init方法创建的对象,需要手动释放,要将对象release掉,而new方法创建的对象,由于在封装的时候已经在内部标记了autorelease,因此创建之后不需要再release。


个人的一点拙见,希望会有帮助!
作者: wanyiyuan    时间: 2014-9-28 01:12
★彬★卍囧神 发表于 2014-9-27 16:22
new方法单一,init初始化可以做用过

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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2