专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Iphone

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

发布时间:2010-05-30 01:26:40 文章来源:www.iduyao.cn 采编人员:星星草
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;
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: