Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 init中工作 在C++中,在构造函数中执行重载是不必要的,除其他事项外,如果在内存分配之后引发异常,则可能会创建内存泄漏。在Java中,它仍然不被鼓励,但由于垃圾收集器的存在,它的重要性降低了。在目标C中,初始方法在重载方面的立场是什么?_Iphone_Objective C_Cocoa - Fatal编程技术网

Iphone 在objective C init中工作 在C++中,在构造函数中执行重载是不必要的,除其他事项外,如果在内存分配之后引发异常,则可能会创建内存泄漏。在Java中,它仍然不被鼓励,但由于垃圾收集器的存在,它的重要性降低了。在目标C中,初始方法在重载方面的立场是什么?

Iphone 在objective C init中工作 在C++中,在构造函数中执行重载是不必要的,除其他事项外,如果在内存分配之后引发异常,则可能会创建内存泄漏。在Java中,它仍然不被鼓励,但由于垃圾收集器的存在,它的重要性降低了。在目标C中,初始方法在重载方面的立场是什么?,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,在目标C中,初始值设定项的模式是 -(id)init { if (self = [super init]) { // Initialization code here } return self; } 如果初始值设定项失败,它应该返回nil。这意味着,如果初始值设定项失败,它需要正确释放self,以避免泄漏。所以我想你是安全的,只要你遵循这个模式 -(id)init { if (self = [super init]) { if (

在目标C中,初始值设定项的模式是

-(id)init
{
    if (self = [super init]) {
       // Initialization code here
    }
    return self;
}
如果初始值设定项失败,它应该返回
nil
。这意味着,如果初始值设定项失败,它需要正确释放
self
,以避免泄漏。所以我想你是安全的,只要你遵循这个模式

-(id)init
{
    if (self = [super init]) {
        if (myInitializationFunc() == ERR_FAIL) {
            [self release];
            return nil;
        }
    }
    return self;
}

一般的指导是,对于任何昂贵的东西,都首选延迟加载。一般来说,
init
应该避免昂贵的调用,因为您可能不需要结果。可能调用方创建了这个对象,然后将其丢弃,或者只查看一个值。您希望避免创建不需要的海量数据结构。本指南旨在提高绩效;这不是一条硬性规定


允许
init
失败并返回
nil
是可以接受的,但并不常见。有关正确的方法,请参见bbum的回答:。

Apple的UIView类建议您将繁重的工作放在viewDidLoad方法中,因此我怀疑类似的规则也在起作用。现实地说,当iPhone Objective C中的
init
方法失败时,应用程序可能已经死机。当然也有例外,但它们是根据具体情况处理的。所以这主要是一个问题,你想变得多“纯洁”,你的应用程序是否需要特别健壮。@HotLicks是这样的,除非有人没有遵循不抛弃init的惯例,否则它会失败。我想说的是,在普通代码中,
init
永远不会失败(除了一些特定的情况,例如当源值无效时初始化NSDate)。因此当
init
失败时,某些东西会严重损坏,应用程序无论如何都会失败。在这种情况下,担心堆泄漏是毫无意义的。