1.alloc和init经常放在一起写,它们分别有什么作用呢?
在初始化一个对象的时候,我们都知道要这样写
Myclass *a = [[Myclass alloc]init];
或者也可以分开写
Myclass *a = [Myclass alloc];
a = [new init];
alloc的作用如其英文含义一样,分配内存给对象,使对象不被释放,将地址返回给指针。
但是分配了内存后,这片内存还没有得到正确的初始化,就跟C中的malloc()函数分配了内存需要调用memset()函数进行初始化一样,OC中init就是为分配好的内存进行初始化。
self=[super init];
if(self){
}
return self;
作用便是从父类中调用init方法为父类属性进行初始化,然后if语句内为子类新增属性初始化,完成初始化工作后返回。
注: 这是可能init
返回一个不同的对象不是被创造alloc
,所以最好的做法嵌套调用,如图所示。
在未将任何指针重新分配给该对象的情况下,切勿初始化该对象。例如,不要这样做:
NSObject * someObject = [NSObject alloc];
[someObject init];
如果对的调用init
返回了其他对象,则将留下指向最初分配但从未初始化的对象的指针。
网友评论