Iphone 在Objective-C中创建构造函数
为什么我们在目标C中创建构造函数时总是这样做Iphone 在Objective-C中创建构造函数,iphone,objective-c,ios,constructor,Iphone,Objective C,Ios,Constructor,为什么我们在目标C中创建构造函数时总是这样做 self = [super init]; if ( self ) { //Initialization code here } 我们重新分配给self,因为[super init]被允许返回一个与调用它的对象不同的对象。我们if(self)是因为[super init]被允许返回nilself是一个基于某个超类的类(例如UIViewController、NSObject-查看您的接口文件以确定是哪个超类)。超类可能需要某种形式的初始化,以便
self = [super init];
if ( self ) {
//Initialization code here
}
我们重新分配给
self
,因为[super init]
被允许返回一个与调用它的对象不同的对象。我们if(self)
是因为[super init]
被允许返回nil
self
是一个基于某个超类的类(例如UIViewController、NSObject-查看您的接口文件以确定是哪个超类)。超类可能需要某种形式的初始化,以便子类按预期工作。因此,通过首先初始化超类,我们确保设置了默认属性等。如果不先初始化超类,我们可能会遇到一些非常意外的行为,特别是在更复杂的对象(如ViewController等)中。阅读有关初始化的apple文档
您可以使用
-(id) init
{
self = [super init];
if(self)
{
//do something
}
return self;
}
-(void) dealloc
{
[super dealloc];
}
这个问题在第一部分问了同样的问题,你应该在那里读巴里的答案。另请参阅Wil Shipley的“self=[Study init];”文章了解更多信息:刚刚发现Standford iOS讲座的第4课(大约25分钟)对此进行了最好的解释。实际上,init方法中的
self
不是类。它是当前类的未初始化实例。