2011-08-29 49 views
3

我运行此代码在5类的实例:当你运行self = [super init]并返回nil时,什么是正确的响应?

-(id)init { 
    self = [super init]; 
    if (self) { 
     // my init code here 
    } 
    return self; 
} 

...和自我回报为零。我知道这是正确的程序,应该完成。但是,如果自我回归零,我的回应是什么?抛出警告程序失败并正在终止?忽略它 ?或者是否有推荐的程序安全地继续?

回答

3

我知道它听起来是递归的,但我认为在这种情况下最好的办法是返回零。

当从初始值设定项返回一个零值时,您无法真正预测该对象的状态,因此最安全的事情就是处理该对象。从初始化程序,这意味着只是返回零给调用者。

当alloc] init] ing时,在我看来,这种情况总是会导致泄漏,所以我一直很犹豫,只是简单地调用alloc] init。

2

我从来没有亲眼见过它发生过。但是因为objc处理的时间很少,所以我不会担心超出你已经做的特殊情况,通过返回你从超级中收到的零。

+0

我把它看作Objective-C的一个错误,可以让你发送消息给nil。这意味着你可能会耗尽内存,直到很长一段时间后,当你不知道如何优雅地处理问题时,才会发现它。 –

+1

你将如何精确地用完内存? –

+1

@Don从-init方法返回nil表示初始化过程失败。如果你的内存不足,+ alloc将返回零,-init永远不会被调用。我更喜欢Objective-C范例。每当您创建一个新对象或收到一个对象作为方法参数时,您忘记检查返回值,您不必担心NULL指针异常。你只需要明确地检查你的应用中重要的那些。 –

相关问题