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

Ami*_*iQo 8 xcode instance

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

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

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

我需要改变什么?

谢谢!

and*_*n22 17

如今,Apple的官方推荐是:

- (id)init{
    self = [super init];
    if(self){
        _rssItems = [[NSMutableArray alloc]init];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

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

当然,大多数课程都没有执行这种切换技巧 - 但这仍然是一种很好的做法,因为Apple希望每个人都使用这种确切的模式init,所以即使您的子类目前无需分配self,它们也可以轻松改变这种行为将来没有任何警告.