正文

入 門(14)

iPhone & iPad Cocos2D游戲開發(fā)實戰(zhàn) 作者:(美)伊特海姆


  

這就是使用自動釋放對象的妙處。你不必再記著給對象發(fā)送釋放信息。每一次cocos2d進入下一幀那些不再使用的自動釋放對象將被自動地釋放。但這樣做也有一個缺點:如果使用上述代碼,然后在下一幀或者以后想要訪問 myNode對象時你就會發(fā)現(xiàn)它已經(jīng)不在內(nèi)存中了。如果這時發(fā)送消息給它,將導(dǎo)致程序出現(xiàn)EXC_BAD_ACCESS錯誤而崩潰。

簡單地把CCNode* myNode變量當(dāng)作類成員變量并不意味著對象使用的內(nèi)存會被自動保留下來。如果想在下一幀或者以后的幀中訪問自動釋放對象,就必須保留它。并且,如果沒有式地將其添加為子節(jié)點,之后還是要對其進行手動釋放。

有一方法可以更好地使用自動釋放對象的方法,并且不需要顯式地調(diào)用retain方法:你可以將生成的CCNode對象作為子節(jié)點添加到另一個派生自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 ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號