autorelease和release的區別
release是立即釋放引用計數,如果到達0,物件被銷毀。
autorelease是延遲釋放,是為了更好管理記憶體產生的。
關於ref
乙個ref物件new之後,引用計數為1,retain()執行+1,release()執行-1;
autorelease()只是將其放入了當前快取池中及autoreleasepool中。
class cc_dll ref
;ref::ref(): _referencecount(1){}
void ref::retain()
void ref::release() //引用計數較少 如果引用計數==0 則delete this
\#endif
delete this;
}
}ref* ref::autorelease() //將物件放入當前管理池的最後
關於autoreleasepool
autoreleasepool管理乙個 std::vector列表,新增時只是放入vector 引用計數不發生變化,
clear()遍歷vector呼叫release()
class cc_dll autoreleasepool
; bool contains(ref* object) const;
void dump();
private:
std::vector_managedobjectarray;
std::string _name;
bool _isclearing;
};
關於poolmanager
儲存乙個std::vector以堆疊的形式進行管理。
class cc_dll poolmanager
;
如何清理
在每一幀繪製完成之後會執行清理工作。
mainloop()
Cocos2d x 記憶體管理 引用計數
引用計數是c c 專案中一種古老的記憶體管理方式。當我8年前在研究一款名叫tcpmp的開源專案的時候,引用計數就已經有了。在cocos2d x中轉殖了一套ccautoreleasepool。有兩點需要注意 只有兩種情況你需要呼叫release 方法 ccsprite create player.pn...
cocos2dx事件分發機制
事件型別 enum class type 事件 型別 enum class type 關於事件 的優先權通過 addeventlistenerwithscenegraphpriority 新增的 優先權為0。通過 addeventlistenerwithfixedpriority 新增的 可以自定義...
cocos2d x記憶體管理機制
c 記憶體機制,採用new關鍵字例項化的物件,必須在不使用的時候手動delete掉,否則new的時候開闢的記憶體就不能被 造成記憶體洩露 npc n1 new npc if exit 0 cocos2d x 記憶體管理的方式,cocos2d x採用引用計數的方式進行記憶體管理,當乙個物件的引用計數為...