Kev*_*vin 12 cocoa objective-c
我刚刚读到了如何在init方法中正确失败,并且文档似乎彼此不同意.一个建议抛出异常,而其他人建议清理并返回零.目前最好的做法是什么?
n8g*_*ray 16
我相信普遍接受的做法是在失败时返回零.但你确实希望释放自我以避免泄漏:
-(id)init
{
if (self = [super init]) {
...
if (thingsWentWrong) {
[self release];
return nil;
}
...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
[self release]; return nil;已经涵盖了正确的解决方案(例外和/或),我将解决不正确的解决方案.
不要dealloc直接发送.那release是工作.(如果您的代码在GC下运行,dealloc则不适用,我只能推测调用它会导致什么问题.)
双 - 不要用来super直接发送它.那会跳过你自己的dealloc实现.
Cocoa关于异常的哲学是它们只应该在程序员错误的情况下抛出,比如将非法参数传递给方法.如果出现其他问题,该方法应该只返回NO或nil,并希望通过NSError**"out"参数报告详细信息.
这包括-init方法.如果错误情况可能在成品中合法地发生,那么该方法应该释放self(以避免泄漏)并返回nil.
| 归档时间: |
|
| 查看次数: |
4160 次 |
| 最近记录: |