- 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;}