首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用__weak避免泄漏

使用__weak避免泄漏
EN

Stack Overflow用户
提问于 2014-11-20 19:30:33
回答 1查看 151关注 0票数 0

在雪碧套件中,我一直在试图找出为什么我的SKScene不会被释放,我相信我终于向答案迈出了更近的一步:我在completion块中使用了很多SKAction。我刚刚学会了我必须使用弱引用。

我该怎么做呢?中的所有都必须是弱的吗?例如,我最近更改了一个块,如下所示:

代码语言:javascript
复制
__weak typeof(self.heli) weakheli = self.heli;

    [weakheli runAction:[SKAction fadeAlphaTo:1.0f duration:1.0f] completion:^{
            ghostMode = NO;
    }];

我是否也必须做一个__weak typeof(ghoseMode) weakGhostMode = ghostMode语句,并且只更改块内的weakGhostMode

另一个例子是:

代码语言:javascript
复制
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
    if (mgFiring) {
        [self fireMG];
    }
}];

改为:

代码语言:javascript
复制
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
    if (mgFiring) {
        [weakSelf fireMG];
    }
}];

谢谢你的帮助!当我通过教程学习Sprite时,我们从来没有被警告过要使用具有强大引用的completion块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 20:39:18

这不需要__weak,因为heli对象用于运行操作,而不是在块中引用

代码语言:javascript
复制
__weak typeof(self.heli) weakheli = self.heli;

[weakheli runAction:[SKAction fadeAlphaTo:1.0f duration:1.0f] completion:^{
        ghostMode = NO;
}];

所以这样就没问题了:

代码语言:javascript
复制
[self.heli runAction:[SKAction fadeAlphaTo:1.0f duration:1.0f] completion:^{
        ghostMode = NO;
}];

这一点也是如此:

代码语言:javascript
复制
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
    if (mgFiring) {
        [weakSelf fireMG];
    }
}];

它应该是:

代码语言:javascript
复制
[self runAction:[SKAction waitForDuration:.1f] completion:^{
    if (mgFiring) {
        [weakSelf fireMG];
    }
}];

在块中只需要(如果有的话) weakSelf。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27047917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档