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

发布于 2024-12-28 09:00:38 字数 289 浏览 0 评论 0原文

- (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美人迟暮 2025-01-04 09:00:38

如今,Apple 的官方建议是:

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

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

当然,大多数类不会执行这种切换技巧 - 但这无论如何都是一个很好的实践,因为 Apple 希望每个人都在其 init 中使用这种精确的模式,所以即使如果您的子类当前在没有分配给 self 的情况下工作,他们将来可以轻松地更改该行为,而不会发出警告。

Nowadays, Apple's official recommendation is:

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

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 set self to whatever super returns. Also note that return self; works fine whether self is nil or not, hence the reversal of your if.

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 to self, they could easily change that behavior in the future without warning.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文