2011-07-03 175 views
5

为什么我们在Objective C中创建构造函数时总是这样做?在Objective-C中创建构造函数

self = [super init]; 
if (self) { 
    //Initialization code here 
} 
+3

问题[一些初级的Objective-C/iPhone问题](HTTP:// stackoverflow.com/questions/710568/some-beginner-objective-c-iphone-questions)在第一部分提出了同样的问题,你应该阅读Barry的答案。另见Wil Shipley的“自我= [愚蠢的初始];”文章更多:http://www.wilshipley.com/blog/2005/07/self-stupid-init.html –

+0

刚刚发现,这是斯坦福大学iOS讲座第4讲(约25分钟)最好的解释。 – NSExplorer

回答

7

因为[super init]被允许返回不同的对象一个比它呼吁我们重新分配给self。我们if (self),因为[super init]被允许返回nil

1

self是基于某些超类的类(例如UIViewController,NSObject - 请参阅您的接口文件以确定哪一个)。超类可能需要某种形式的初始化才能使子类按预期工作。因此,通过首先初始化超类,我们确保设置默认属性等。如果不先初始化超类,我们可能会遇到一些非常意想不到的行为,特别是在像ViewControllers等更复杂的对象中。

+4

实际上,init方法中的'self'不是一个类。这是当前类的未初始化的实例。 – Chuck

+0

是的,对。感谢您的更正。 –

9

您可以创建在Objective-C的构造函数和析构函数与

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     //do something 
    } 
    return self; 
} 
-(void) dealloc 
{ 
    [super dealloc]; 
}