2009-11-24 69 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