-(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 ??

解决方案 »

  1.   

     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多试试就好了
      

  2.   


    -(myClass *) initWith:(int) n :(int) m
    {
        self = [super init];//这样写,表示:只能通过 with 的初始化,调用 init 没有对应的初始化操作。
        //[self init];      //如果自己的类没有实现 init 函数,这句等同于上一句。
        if (self) 
        {
            [self setNum1:n andNum2:m];
        }
        return self;
    }