Ios Cocos2d:我应该只使用(id)init进行初始化,还是可以使用(void)oneter进行延迟分配?

Ios Cocos2d:我应该只使用(id)init进行初始化,还是可以使用(void)oneter进行延迟分配?,ios,architecture,cocos2d-iphone,initialization,allocation,Ios,Architecture,Cocos2d Iphone,Initialization,Allocation,在学习Cocos2d的过程中,我发现iOS UIKit的-(void)oneter,-(void)onExit,可以像它们的对应项一样使用,-(void)viewDidLoad,-(void)viewDidUnload 我知道它们在技术上并不能很好地替代原来的-(id)init,我经常看到学习Cocos2d的指导性文本,它的所有属性和变量都只使用-(id)init方法 但是,如果我使用-(void)oneter进行分配和初始化,我可以参考self.parent以获得更清晰的代码 假设我可以继续使

在学习Cocos2d的过程中,我发现iOS UIKit的
-(void)oneter
-(void)onExit
,可以像它们的对应项一样使用,
-(void)viewDidLoad
-(void)viewDidUnload

我知道它们在技术上并不能很好地替代原来的
-(id)init
,我经常看到学习Cocos2d的指导性文本,它的所有属性和变量都只使用
-(id)init
方法

但是,如果我使用
-(void)oneter
进行分配和初始化,我可以参考
self.parent
以获得更清晰的代码


假设我可以继续使用-(void)oneter进行分配和初始化,而不用担心使用Cocos2d框架进行开发是否正确,这样安全吗?

假设您对初始化和内存管理非常谨慎,这听起来是处理代码的一种非常合理的方法,但正如您所提到的,这不是标准,所以请小心一些陷阱

-(void)oneter
-(void)onExit
方法实际上更像
-(void)视图将出现
-(void)视图将消失
,而不是
-(void)viewdiload
-(void)viewdiload

注意:

  • onner也会在节点的所有子节点上递归调用
  • 根据您处理场景的方式,可能会多次调用onEnter,而只会调用init 一旦小心你的物品不会因意外分配而泄漏 他们不止一次

    • 这是可行的,但不是一个好方法。当将CCNode添加到另一个CCNode时,而不是将其或其父节点添加到屏幕时,将调用OnNet。OnNet和OnInterTransitionsFinished表示CCNode已加载并准备就绪。并且,除非您特别地将您的CCNode保持在另一个CCNode之外(坏形式),否则在初始化之后,将立即在中调用onEnter。所以你所谓的懒惰分配是没有意义的


      更重要的是,无论如何,您应该在场景开始时加载尽可能多的可缓存数据(纹理等),以防止场景中出现诸如延迟分配大型可缓存数据等问题。如果你在场景开始时正确地完成了所有繁重的工作,那么等待设置一些标志和数字变量对你没有任何好处。而用一种专门用于其他事情的方法这样做就更没有帮助了。

      感谢您帮助我学习Cocos2d框架。虽然您没有给我负面的输入,但我决定不使用OneNet进行初始化。像许多指令一样,重新构造了我的代码,以遵循使用(void)init的更传统的方法。