为什么我们在Objective C中创建构造函数时总是这样做?在Objective-C中创建构造函数
self = [super init];
if (self) {
//Initialization code here
}
为什么我们在Objective C中创建构造函数时总是这样做?在Objective-C中创建构造函数
self = [super init];
if (self) {
//Initialization code here
}
因为[super init]
被允许返回不同的对象一个比它呼吁我们重新分配给self
。我们if (self)
,因为[super init]
被允许返回nil
。
self
是基于某些超类的类(例如UIViewController,NSObject - 请参阅您的接口文件以确定哪一个)。超类可能需要某种形式的初始化才能使子类按预期工作。因此,通过首先初始化超类,我们确保设置默认属性等。如果不先初始化超类,我们可能会遇到一些非常意想不到的行为,特别是在像ViewControllers等更复杂的对象中。
实际上,init方法中的'self'不是一个类。这是当前类的未初始化的实例。 – Chuck
是的,对。感谢您的更正。 –
您可以创建在Objective-C的构造函数和析构函数与
-(id) init
{
self = [super init];
if(self)
{
//do something
}
return self;
}
-(void) dealloc
{
[super dealloc];
}
问题[一些初级的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 –
刚刚发现,这是斯坦福大学iOS讲座第4讲(约25分钟)最好的解释。 – NSExplorer