objective-c – 我应该总是为失败的init方法释放self?

objective-c – 我应该总是为失败的init方法释放self?,第1张

概述如果init中出现故障,我应该总是释放自己,还是只有在初始化了实例变量的时候才应该这么做? 换句话说,这种模式是否有效?有没有时间,我不应该在init方法中释放self,或者我应该假设如果控制流进入init,self至少有一个保留计数为1? - (id)init{ if ((self = [super init]) == nil) { [self release]; return n 如果init中出现故障,我应该总是释放自己,还是只有在初始化了实例变量的时候才应该这么做?

换句话说,这种模式是否有效?有没有时间,我不应该在init方法中释放self,或者我应该假设如果控制流进入init,self至少有一个保留计数为1?

- (ID)init{ if ((self = [super init]) == nil) {  [self release];  return nil; } //do some init stuff if (somethingFailed) {  [self release];  return nil; } return self;}
解决方法 如果在初始化方法中需要检查失败,那么是的,你应该释放自己.但是请注意,如果[super init]返回nil,那么将自己发送给self是没有意义的,因为self为nil.这实际上是由苹果皱眉:

You should only call [self release] at the point of failure. If you get nil back from an invocation of the superclass’s initializer,you should not also call release.

例:

- (ID)init{   self = [super init];   if(self) {       // do some init stuff       if (somethingFailed)       {          [self release]          self = nil;       }   }   return self;}

另请参阅Handling Initialization Failure上的Mac Dev Center文档

总结

以上是内存溢出为你收集整理的objective-c – 我应该总是为失败的init方法释放self?全部内容,希望文章能够帮你解决objective-c – 我应该总是为失败的init方法释放self?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1233033.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存