正文

入 门(14)

iPhone & iPad Cocos2D游戏开发实战 作者:(美)伊特海姆


  

这就是使用自动释放对象的妙处。你不必再记着给对象发送释放信息。每一次cocos2d进入下一帧那些不再使用的自动释放对象将被自动地释放。但这样做也有一个缺点:如果使用上述代码,然后在下一帧或者以后想要访问 myNode对象时你就会发现它已经不在内存中了。如果这时发送消息给它,将导致程序出现EXC_BAD_ACCESS错误而崩溃。

简单地把CCNode* myNode变量当作类成员变量并不意味着对象使用的内存会被自动保留下来。如果想在下一帧或者以后的帧中访问自动释放对象,就必须保留它。并且,如果没有式地将其添加为子节点,之后还是要对其进行手动释放。

有一方法可以更好地使用自动释放对象的方法,并且不需要显式地调用retain方法:你可以将生成的CCNode对象作为子节点添加到另一个派生自CCNode 的对象中,甚至可以删除成员变量,而直接依赖cocos2d来保存对象:

// creating an autorelease instance of CCNode

-(void) init

{

myNode = [CCNode node];

myNode.tag = 123;

// adding the node as children to self (assuming self is derived from CCNode)

[self addChild:myNode];

}

-(void) update:(ccTime)delta

{

// later access and use the myNode object again

CCNode* myNode = [self getChildByTag:123];

// do something with myNode

}


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号