首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

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

2012-01-30 
object c的initWith方法的疑问C/C++ code-(myClass *) initWith:(int) n :(int) m{self [super init]//

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

热点排行