Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在Objective-C中创建构造函数_Iphone_Objective C_Ios_Constructor - Fatal编程技术网

Iphone 在Objective-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-查看您的接口文件以确定是哪个超类)。超类可能需要某种形式的初始化,以便

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

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
不是类。它是当前类的未初始化实例。