书上说:
内存管理原则3:传递赋值时,需要先retain形参,后release原指针,最后赋值。(注意,因为这里没有使用自赋值检查,所以这组顺序不能错。)
例子:
void CCNode::setGrid(CCGridBase* pGrid)
{
CC_SAFE_RETAIN(pGrid); //1
CC_SAFE_RELEASE(m_pGrid); //2
m_pGrid = pGrid;
}
请问为啥1和2不能换顺序?
书上说:
内存管理原则3:传递赋值时,需要先retain形参,后release原指针,最后赋值。(注意,因为这里没有使用自赋值检查,所以这组顺序不能错。)
例子:
void CCNode::setGrid(CCGridBase* pGrid)
{
CC_SAFE_RETAIN(pGrid); //1
CC_SAFE_RELEASE(m_pGrid); //2
m_pGrid = pGrid;
}
请问为啥1和2不能换顺序?
你不是提到了没有“自赋值检查”吗,你无法保证this->m_pGrid和pGird是否指向同一块内存, 如果他俩指向同一块内存, 步骤2先执行的话,如果release之后把内存释放了掉了,形参pGird就是野指针,CC_SAFE_RETAIN(pGrid)对野指针调retain(), 你懂得哦
懂啦。。谢谢你