在SKTransition上运行SKScene是否会破坏原始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];在执行过渡时,当前的场景会被销毁吗?还是还在记忆里?新的场景与旧的场景有联系吗?
发布于 2014-02-19 12:16:03
假设您的scene属性与此@property(weak) SKScene *scene;类似,则答案是肯定的,当您呈现另一个场景或将其从堆栈中弹出时,将被销毁。
如果您拥有像@property(strong) SKScene *scene这样的属性,那么答案是否定的,您的场景将留在内存中,直到您执行此self.scene = nil;操作为止。
但请记住,SKView视网膜显示的场景,所以您应该在您的应用程序中的某个地方,以避免保留周期(当您有强大的属性)。
发布于 2014-02-19 12:32:27
添加到前面的答案中,如果您仍然不确定并且希望轻松检查原始场景何时/是否已被释放,您可以简单地通过重写dealloc方法和记录消息/设置断点来查看运行时是否调用了它。把这个放在你以前的场景里:
-(void)dealloc {
NSLog(@"Old scene deallocated");
}默认情况下(如果没有在其他地方强烈引用),它将在整个转换完成并且新场景完全移动到您的视图后被释放。因此,在过渡期间,两个场景都将存在于内存中。
发布于 2014-02-19 11:58:09
弧线将取消旧场景,除非你特别强烈地引用到其他地方。
默认情况下,它不会在新场景中引用。
https://stackoverflow.com/questions/21879747
复制相似问题