在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];
执行转换时是否会破坏当前场景?还是记忆中的?新场景是否有参考旧场景?
答案 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将取消分配旧场景,除非您特别强烈在其他地方引用它。
默认情况下,新场景中未引用它。