当前位置:  开发笔记 > IOS > 正文

init方法中的[self release],[self dealloc]或[super dealloc]?

如何解决《init方法中的[selfrelease],[selfdealloc]或[superdealloc]?》经验,为你挑选了3个好方法。

我刚刚读到了如何在init方法中正确失败,并且文档似乎彼此不同意.一个建议抛出异常,而其他人建议清理并返回零.目前最好的做法是什么?



1> n8gray..:

我相信普遍接受的做法是在失败时返回零.但你确实希望释放自我以避免泄漏:

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



2> Peter Hosey..:

[self release]; return nil;已经涵盖了正确的解决方案(例外和/或),我将解决不正确的解决方案.

不要dealloc直接发送.那release是工作.(如果您的代码在GC下运行,dealloc则不适用,我只能推测调用它会导致什么问题.)

双 - 不要用来super直接发送它.那会跳过你自己的dealloc实现.



3> Jens Alfke..:

Cocoa关于异常的哲学是它们只应该在程序员错误的情况下抛出,比如将非法参数传递给方法.如果出现其他问题,该方法应该只返回NO或nil,并希望通过NSError**"out"参数报告详细信息.

这包括-init方法.如果错误情况可能在成品中合法地发生,那么该方法应该释放self(以避免泄漏)并返回nil.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有