黑马程序员技术交流社区

标题: 创建对象的问题 [打印本页]

作者: 啊康    时间: 2014-4-21 22:07
标题: 创建对象的问题
我们创建一个对象用:
Person  *p = [[Person  alloc]   init];
alloc方法和init方法分别分别的作用是什么?在内存中的表现是什么样子?

作者: 戴文婷    时间: 2014-4-21 22:15
只知道alloc是开辟内存空间,init是调用自己写的init方法,或者调用父类的init方法来初始化对象,内存空间的话,要看你有哪些私有变量了。还要再加个iso指针。
作者: D调的沉默    时间: 2014-4-21 22:15
这个啊,alloc方法的作用是在内存中为这个对象分配一块存储空间。
而init方法的作用是把对象初始化,把对象内的成员变量初始化为0,可以重写对象的init方法。
内存中的表现,老师画的有图,你可以查一下。
作者: m573555543    时间: 2014-4-22 08:15
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方法,对此方法进行覆盖就可以保证类型对象的单一性了






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