'self'时使用的实例变量未设置为'[(super或self)init ...]的结果

时间:2012-01-21 15:41:14

标签: xcode instance

- (id)init{
    if(![super init]){
        return nil;
    }
    _rssItems = [[NSMutableArray alloc]init];
    return self;
}

如果我分析我的项目,我会收到此警告:

  

'self'时使用的实例变量未设置为结果   '[(超级或自​​我)初始化......]'

我需要改变什么?

谢谢!

1 个答案:

答案 0 :(得分:17)

如今,Apple的官方建议是:

- (id)init{
    self = [super init];
    if(self){
        _rssItems = [[NSMutableArray alloc]init];
    }
    return self;
}

这个想法是允许init(特别是在这种情况下,[super init])返回self以外的对象,在这种情况下,预期的行为是使用该对象 - 处理此问题的最简单方法是将self设置为super返回的任何内容。另请注意,return self;无论self是否为零,都可以正常工作,因此if会逆转。

当然,大多数课程都没有执行这种切换技巧 - 但无论如何这是一种很好的做法,因为Apple希望每个人都为他们的init使用这种确切的模式,所以甚至如果您的子类当前无法分配给self,则可以在未经警告的情况下轻松更改该行为。