cocos2d-x 延續了cocos2d 和OC的引用計數的內存管理機制!
下面我們來看看CCDriectro類 CCPoolManager::sharedPoolManager()->push(); 基礎:我們要先熟悉 release 釋放該內存! CCPoint *temp = new CCPoint(controlPoint.x, controlPoint.y);m_pControlPoints->addObject(temp);
temp->release();
autorelease 是標記自動釋放對象!下面會講到自動內存釋放 是怎麼操作的
CCString* pRet = new CCString(str);
pRet->autorelease();
return pRet;
CCPoolManager::sharedPoolManager()->pop(); 看看這兩個方法!就相當於OC的內存釋放池! 在CCDriectro中 每次去渲染的時候!都會去查看內存釋放池的是否有內存計數為0的對象!如果有的話!就會去清理掉!釋放內存!
其實我們在游戲開發中 注意一些內存的管理,對游戲有很大的幫助!一點一點積攢起來!就會對游戲內存吃緊的問題!有本質的解決!
1,如場景切換 在內存吃緊的情況下 我們可以選擇 先清理一下緩存!
// 清空緩存 CCDirector::sharedDirector()->purgeCachedData();
2,場景切換也有注意的地方!場景切換 有壓入式加入!替換式加入!
這裡說一下壓入場景(pushScene)和彈出場景(popScene)。它們都可以用來顯示場景 和保留當前場景並顯示新場景 ;不同的是它們不把舊場景從內存中釋放掉,這樣可以提高加 載速度,這時需要注意,如果內存不足以支撐的話,建議采用 replaceScene函數。
以上過程分為以下三步:
1)調用 CCDirector::sharedDirector()->purgeCachedData() 清空緩存。
2)新建場景。
3)調用 CCDirector::sharedDirector()->replaceScene(this) 替換新場景。Cocos2D-x 提供了場景間切換的特效,下一節將會介紹這些內容。
p=93一、內存優化原則 為了優化應用內存,你應該知道是什麼消耗了你應用的大部分內存,答案就是Texture(紋理)!它幾乎占據了90%的應用內存。那麼我們應該盡力去減小我們應用的紋理內存使用,否則我們的應用進程可能會被系統殺死。 為了減少內存警告,這裡我們給出兩個普遍的關於cocos2dx游戲內存優化的指導原則。1)了解瓶頸,然後解決掉 什麼樣的紋理消耗了大部分應用的內存呢?或者說這些紋理消耗了多少內存呢?你不用去手工計算或者猜測。 這裡我們正好有一個工具。它就是蘋果的開發工具- Allocations & Leaks,在xcode中你長按Run按鈕並且選擇Profile去啟動這兩個工具。這裡我們有個截圖:你可以使用Allocation工具去計算你應用的內存使用情況並且可以查看內存洩露情況。 你也可以用一些代碼去獲取游戲內存使用的一些有用的信息。 如下代碼即可:CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo(); 如下所示:當你調用這些代碼並且在DEBUG模式運行你的游戲的時候,在你的xcode console窗口你將會看到一些格式化的log信息Cocos2d: cocos2d: "cc_fps_images" rc=5 id=3 256 x 32 @ 16 bpp => 16 KB Cocos2d: cocos2d: "XXX/hd/actor.pvr.ccz" rc=1059 id=4 2048 x 2048 @ 32 bpp => 16384 KB Cocos2d: cocos2d: CCTextureCache dumpDebugInfo: 2 textures, for 16400 KB (16.02 MB) 這些log顯示了紋理的名字,引用數,id,大小以及像素的bit值,最重要的是它展示了內存使用情況。如上cc_fps_images消耗了16KB,actor.pvr.ccz消耗了16M內存。2)不要過度優化 這是一個常規的優化規則。當你進行內存優化的時候,你應當進行一下權衡。因為有時圖片質量和圖片內存使用情況是相反的兩邊。所以千萬不要過度優化。二、內存優化等級 這裡我們把cocos2dx內存優化劃分成三個等級。在每個等級,我們有不同觀點並且策略也是有些變化。1、cocos2dx 客戶端等級 這是我們可以關心的最重要的優化等級。因為我們在cocos2dx引擎上開發游戲,引擎自己就提供了很多可選擇的優化方案。在這個等級上,我們可以做的工作最多。首先,讓我們看一下紋理優化 為了優化紋理內存的使用,我們必須知道什麼因素影響了內存的使用情況。 有三個因素影響了紋理的內存使用。紋理格式(壓縮的還是非壓縮的),顏色,大小。 我們可以使用PVR格式的紋理來減少內存使用。最被建議的紋理格式是pvr.ccz,每色的bit值越高,畫面質量就約好。但是也會消費很多內存。 那麼我們使用顏色深度是RGBA4444的紋理來代替RBGA8888,這將會消費一半內存。 我們也會發現大紋理也會導致內存相關的問題。那麼你最好使用適度的大小。其次,讓我們做一些關於聲音的事情 有三個因素影響文件內存使用。是音頻文件格式,比特率,和樣本率 我們最希望音頻文件時mp3格式。因為它被android和ios都支持。並且它也被壓縮並且硬件加速了。 你應該保證你的背景音樂文件大小在800KB一下。最簡單的方式就是減少背景音樂播放時間並且......余下全文>>
1. 在你的工程項目中Control-Click選中libs文件夾,在彈出菜單上選擇Delete。然後在Delete刪除對話框上再次選擇Delete按鈕進行徹底刪除。這將從工程項目中刪除Cocos2D文件,但這是必須的。因為我們會另外分開引入到項目中,我們要做得是允許使用ARC設置我們的項目(不過允許Cocos2D代碼仍不帶ARC)。2. 找到我們下載的原Cocos2D 2.0項目中的cocos2d-ios.xcodeproj文件,將之拖進我們的開發項目中。