在SKScene上运行SKTransition会破坏原点SKScene吗?

时间:2014-02-19 11:55:28

标签: ios ios7 sprite-kit

在SKScene上运行SKTransition会破坏原点SKScene吗?

例如:

 SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
    GameConfigScene *newScene = [[GameConfigScene alloc] initWithSize: CGSizeMake(1024,768)]];
//  Optionally, insert code to configure the new scene.
    [self.scene.view presentScene: newScene transition: reveal];

执行转换时是否会破坏当前场景?还是记忆中的?新场景是否有参考旧场景?

3 个答案:

答案 0 :(得分:3)

让我们假设您的scene属性类似于@property(weak) SKScene *scene;,那么答案是肯定的,当您呈现另一个场景或从堆栈中弹出它时,它将被销毁。
如果你有@property(strong) SKScene *scene之类的属性,那么答案是否定的,你的场景将保留在内存中,直到你执行此操作self.scene = nil;
但是请记住,SKView会在所呈现的场景中进行视线调整,因此您应该在应用中的某个位置使其无效,以避免保留周期(当您拥有强大的属性时)。

答案 1 :(得分:2)

添加到之前的答案,如果您仍然不确定并且想要轻松检查原始场景何时/是否已取消分配,您可以通过覆盖dealloc方法并记录消息/设置来完成此操作断点以查看它是否被运行时调用。把它放在旧场景中:

-(void)dealloc {
    NSLog(@"Old scene deallocated");
}

默认情况下(如果没有在其他地方强烈引用),在整个转换完成并且新场景完全移动到您的视图后,它将被解除分配。因此,在转换期间,两个场景都将存在于内存中。

答案 2 :(得分:1)

ARC将取消分配旧场景,除非您特别强烈在其他地方引用它。

默认情况下,新场景中未引用它。