在Objective-C中创建构造函数

5

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

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

3
这个问题的第一部分与 Some beginner Objective-C/iPhone questions 相同,你应该阅读那里的Barry的回答。此外,还应查看Wil Shipley的文章“self = [stupid init];”以获取更多信息:http://www.wilshipley.com/blog/2005/07/self-stupid-init.html - Brad Larson
刚刚发现这个最好在斯坦福iOS讲座的第四课(大约在25分钟处)中解释。 - NSExplorer
4个回答

11

你可以使用Objective-C来创建构造函数和析构函数

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

8

我们重新指向self,因为[super init]允许返回与调用对象不同的对象。我们使用if (self)是因为[super init]允许返回nil


1

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


4
实际上,在初始化方法中的 self 并不是一个类,而是当前类的未初始化实例。 - Chuck


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接