“self”时使用的实例变量未设置为“[(super or self) init...]”的结果
- (id)init{
if(![super init]){
return nil;
}
_rssItems = [[NSMutableArray alloc]init];
return self;
}
如果我分析我的项目,我会收到以下警告:
“self”未设置为以下结果时使用的实例变量 '[(超级或自我)初始化...]'
我需要改变什么?
谢谢!
- (id)init{
if(![super init]){
return nil;
}
_rssItems = [[NSMutableArray alloc]init];
return self;
}
If I analyze my project I get this warning:
Instance variable used while 'self' is not set to the result of
'[(super or self) init...]'
What do I have to change?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如今,Apple 的官方建议是:
这个想法是允许
init
(特别是在本例中为[super init]
)返回 self 以外的对象,并且在这种情况下,预期的行为是使用该对象 - 处理此问题的最简单方法是将self
设置为super
返回的任何内容。另请注意,无论self
是否为 nil,return self;
都可以正常工作,因此if
的反转。当然,大多数类不会执行这种切换技巧 - 但这无论如何都是一个很好的实践,因为 Apple 希望每个人都在其
init
中使用这种精确的模式,所以即使如果您的子类当前在没有分配给 self 的情况下工作,他们将来可以轻松地更改该行为,而不会发出警告。Nowadays, Apple's official recommendation is:
The idea is that
init
(in particular, in this case,[super init]
) is allowed to return an object other than self, and the expected behavior in that case is to work with that object instead--the easiest way to deal with this is to just setself
to whateversuper
returns. Also note thatreturn self;
works fine whetherself
is nil or not, hence the reversal of yourif
.Of course, most classes don't perform this switching trick--but this is good practice anyway because Apple expects everyone to be using this exact pattern for their
init
, so even if your subclass currently works without assigning toself
, they could easily change that behavior in the future without warning.