2009-11-24 107 views
0
BOOL continueLoop; 
CGPoint thePoint; 

while(continueLoop != NO) 
{ 
    continueLoop = NO; 

    thePoint = [self generateRandomLocation]; 

    NSMutableArray *blocks = [self getBlocksForX:thePoint.x]; 

    for(BlueBlock *block in blocks) 
    { 
     if(block.getBlockLocationY == thePoint.y) 
     { 
      continueLoop = YES; 
     } 
    } 
    [blocks release]; 
} 

這會導致在儀器中運行時發生崩潰,但不會在Xcode中運行。我縮小了問題的範圍,發生在這行代碼在循環中時... NSMutableArray * blocks = [self getBlocksForX:thePoint.x];該方法返回一個NSMutableArray,每次執行循環時我都將其存儲在塊中,然後在循環結束時將其釋放。什麼會導致儀器崩潰?代碼行導致儀器崩潰,但不是Xcode

回答

3

因爲你永遠不會alloc,copyretain塊你不應該釋放它。

它可能有助於像這樣的錯誤運行靜態分析器。

+0

該方法返回一個已分配的NSMutableArray – ACV 2009-11-24 01:44:27

+0

啊,通常的約定是(從內存管理編程指南)'你使用名稱以「alloc」或「new」開頭或包含「copy」http的方法創建一個對象http ://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-BEHDEDDB – cobbal 2009-11-24 01:47:23

+0

好吧,我還在學習我會記得那爲了未來。 – ACV 2009-11-24 01:50:14