Iphone 在objective C init中工作 在C++中,在构造函数中执行重载是不必要的,除其他事项外,如果在内存分配之后引发异常,则可能会创建内存泄漏。在Java中,它仍然不被鼓励,但由于垃圾收集器的存在,它的重要性降低了。在目标C中,初始方法在重载方面的立场是什么?
在目标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 (
-(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
失败时,某些东西会严重损坏,应用程序无论如何都会失败。在这种情况下,担心堆泄漏是毫无意义的。