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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 啊康 中级黑马   /  2014-4-21 22:07  /  1479 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们创建一个对象用:
Person  *p = [[Person  alloc]   init];
alloc方法和init方法分别分别的作用是什么?在内存中的表现是什么样子?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
只知道alloc是开辟内存空间,init是调用自己写的init方法,或者调用父类的init方法来初始化对象,内存空间的话,要看你有哪些私有变量了。还要再加个iso指针。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
这个啊,alloc方法的作用是在内存中为这个对象分配一块存储空间。
而init方法的作用是把对象初始化,把对象内的成员变量初始化为0,可以重写对象的init方法。
内存中的表现,老师画的有图,你可以查一下。
回复 使用道具 举报
obj = [NSObject new];
中的new可以分成两部分:alloc   和   init
当调用new方法时,其实是先调用了alloc方法进行isa(is a pointer)操作,创建指针,指向内存中的数据结构,紧接着调用了init方法对数据进行初始化。

obj = [[NSObject alloc]init];
先调用alloc创建指针指向内存中的数据结构,再调用init方法初始化数据。这里需要注意的是,init方法只是起到了初始化数据的作用,其实也可以自定义初始化方法,即完全可以自定义一个普通返回NSObject类型的方法来代替init方法,即init方法是可以随意被代替的。

其实只有alloc方法是每次必须调用的方法,那么我们只要控制住alloc方法,对此方法进行覆盖就可以保证类型对象的单一性了

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马