- (id)init{ if(![super init]){ return nil; } _RSSItems = [[NSMutableArray alloc]init]; return self; }
如果我分析我的项目,我会收到此警告:
Instance variable used while ‘self’ is not set to the result of
‘[(super or self) init…]’
我需要改变什么?
谢谢!
解决方法
如今,Apple的官方推荐是:
- (id)init{ self = [super init]; if(self){ _RSSItems = [[NSMutableArray alloc]init]; } return self; }
这个想法是允许init(特别是在这种情况下,[super init])返回self以外的对象,在这种情况下,预期的行为是使用该对象 – 最简单的处理方式这只是将自己设置为任何超级回报.还要注意回归自我;无论自我是否为零,都可以正常工作,从而逆转你的if.
当然,大多数课程都没有执行这种切换技巧 – 但这仍然是一种很好的做法,因为Apple希望每个人都使用这种确切的模式用于他们的init,所以即使你的子类目前无需分配给自己,它们也可以很容易地改变这种行为在未来没有警告.