cocos2d x精靈記憶體管理

2021-09-30 10:59:30 字數 2153 閱讀 2641

1bool helloworld::init()

2 while (0);

3839 return bret;

40}41

42void helloworld::update(cctime dt)

4346

47void helloworld::refreshdata()

48

1.上面的

bomb

精靈在函式結束後是否會釋放?

跟蹤addchild

函式可以看到

void ccnode::addchild(ccnode *child, int zorder, int tag)

this->insertchild(child, zorder); //重點

child->m_ntag = tag;

child->setparent(this);

child->setorderofarrival(s_globalorderofarrival++);

if( m_brunning )

}

進入insertchild

void ccnode::insertchild(ccnode* child, int z)

在裡面進行了引用計數的

+1,使得在函式結束後物件不會被自動**。

2.上面的

bomb

精靈在什麼時候釋放?

見ccnode的析構函式

ccnode::~ccnode(void)

cc_safe_release(m_pactionmanager);

cc_safe_release(m_pscheduler);

// attributes

cc_safe_release(m_pcamera);

cc_safe_release(m_pgrid);

cc_safe_release(m_pshaderprogram);

cc_safe_release(m_puserobject);

if(m_pchildren && m_pchildren->count() > 0)}}

// children

cc_safe_release(m_pchildren); //這邊,降低m_pchildren的引用計數,使其釋放

// m_pcomscontainer

m_pcomponentcontainer->removeall();

cc_safe_delete(m_pcomponentcontainer);

}

ccarray的釋放會呼叫到

/** frees array after removing all remaining objects. silently ignores null arr. */

void ccarrayfree(ccarray*& arr)

ccarrayremoveallobjects(arr);

free(arr->arr);

free(arr);

arr = null;

}

進入ccarrayremoveallobjects

/** removes all objects from arr */

void ccarrayremoveallobjects(ccarray *arr)

}

3.上面的

m_pbombsdisplayed

會在什麼時候釋放?

見ccarray

的create

函式,create後引用計數為1,在函式結束後-1為0被釋放

ccarray* ccarray::create()

else

return parray;

}

4.解決

m_pbombsdisplayed

的問題,主動

retain,在

helloworld

析構的時候

release

cocos2dx 記憶體管理

記憶體管理中經常遇到的問題 記憶體洩露,記憶體溢位。在cocos2dx中用的是引用計數和自動釋放池的技術,由於熟悉objective c語言,所以對這兩個概念不會很陌生。一 引用計數 引用計數是自動記憶體管理的基礎 在物件裡增加乙個引用計數,當外部引用增加時,計數器加1,當外部引用消失時,計數器減1...

cocos2d x 記憶體管理

呼叫了autorelease的物件,將會在自動 池釋放的時候被釋放一次。因為這個操作發生在 mainloop drawscene 後,這時候遊戲中所有的邏輯已經執行完畢,正是釋放無效資源的最佳時機。所以乙個物件被create後,將被放進pool中,其ref 數為1,當遊戲整個邏輯跑完,如果沒有增加r...

cocos2dx 記憶體管理

我們知道,cocos2dx中使用了引用計數的方式去管理記憶體,不需要我們手動delete的去釋放記憶體。那麼cocos2dx中是怎麼實現引用計數的記憶體管理方式的呢?cocos2dx中的記憶體管理用到了兩個工具 引用計數器 ref 自動 池 autoreleasepool 引用計數器 ref ref...