在雪碧套件中,我一直在试图找出为什么我的SKScene不会被释放,我相信我终于向答案迈出了更近的一步:我在completion块中使用了很多SKAction。我刚刚学会了我必须使用弱引用。
我该怎么做呢?中的所有都必须是弱的吗?例如,我最近更改了一个块,如下所示:
__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?
另一个例子是:
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[self fireMG];
}
}];改为:
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[weakSelf fireMG];
}
}];谢谢你的帮助!当我通过教程学习Sprite时,我们从来没有被警告过要使用具有强大引用的completion块。
发布于 2014-11-20 20:39:18
这不需要__weak,因为heli对象用于运行操作,而不是在块中引用。
__weak typeof(self.heli) weakheli = self.heli;
[weakheli runAction:[SKAction fadeAlphaTo:1.0f duration:1.0f] completion:^{
ghostMode = NO;
}];所以这样就没问题了:
[self.heli runAction:[SKAction fadeAlphaTo:1.0f duration:1.0f] completion:^{
ghostMode = NO;
}];这一点也是如此:
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[weakSelf fireMG];
}
}];它应该是:
[self runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[weakSelf fireMG];
}
}];在块中只需要(如果有的话) weakSelf。
https://stackoverflow.com/questions/27047917
复制相似问题