初始化一个对象:
NSString *string=[NSString alloc];//开辟一个内存空间,并把地址返回给指针
NSLog(@"string=%p",string); // string=0x7fb32ae01880
string=[string init];//初始化
NSLog(@"string=%p",string);//string=0x1055d3390
打印地址不一样:
alloc是开辟一个内存空间,init是初始化,为什么初始化不在原有的内存空间上初始化,而是重新开辟一个内 存空间,个人认为是方便构造后初始化不同的方法
NSObject *object=[NSObject alloc];
NSLog(@"object=%p",object);//
object=0x7fb32aea0680
object=[object init];
NSLog(@"object=%p",object);//object=0x7fb32aea0680
new:
+ new
{
id newObject = (*_alloc)((Class)self, 0);
Class metaClass = self->isa;
if (class_getVersion(metaClass) > 1)
return [newObject init];
else
return newObject;
}
通过源码中我们发现,[className new]基本等同于[[className alloc] init];