当前位置: 代码迷 >> Iphone >> object c的initWith方法的疑问,该如何处理
  详细解决方案

object c的initWith方法的疑问,该如何处理

热度:213   发布时间:2016-04-25 06:52:29.0
object c的initWith方法的疑问
C/C++ code
-(myClass *) initWith:(int) n :(int) m{    self = [super init];//书本用这行 1    //[self init];      //测试也通过 2    if (self)     {        [self setNum1:n andNum2:m];    }    return self;}


请问,1,2两处是否等价?为什么书本要调用super的init ??

------解决方案--------------------
self = [super init];//书本用这行 1
//[self init]; //测试也通过 2
关于1:super init是调用父类的初始化函数,如果子类需要父类的某些资源是需要如此的,self=[super init],指子类指针指向父类的资源
关于2:初始化子类资源,比如子类有个NSString * str=[[NSString alloc]init];会调用该方法,其实在init函数里面,
-(id)init
{return self;}也是可以运行的,但如果工程复杂的话不行,如子类大量使用父类的资源,这也就是为什么在子类的dealloc中有[super dealloc]的原因,另,OC是2阶段构造的及alloc和init是分开的,init前已经分配的控件,init只是完成初始化而已,希望明白,建议自己重写init多试试就好了
------解决方案--------------------
C/C++ code
-(myClass *) initWith:(int) n :(int) m{    self = [super init];//这样写,表示:只能通过 with 的初始化,调用 init 没有对应的初始化操作。    //[self init];      //如果自己的类没有实现 init 函数,这句等同于上一句。    if (self)     {        [self setNum1:n andNum2:m];    }    return self;}
  相关解决方案