插入了NSMutableArray释放对象。 - >导致内存泄漏

时间:2010-12-10 20:27:23

标签: iphone objective-c cocoa

嗨我有很多问题要删除我的可变数组的对象。

我有一个方法,它发回一个用自定义对象初始化的mutable。 这个mutable被声明为autorelease,用于在方法之后释放。 在我的回归中,我保留了变量以免松动它。 我希望在第二种方法中删除我的mutable的内容并释放我的mutable。 但我的应用程序退出并失败。

  //first method which return my mutable

 NSMutableArray *highScores = [[[NSMutableArray alloc] init]autorelease] ;

    for (....)
    {

    HighScore *currentHighScore = [[HighScore alloc] init];

    currentHighScore.user = name;
    currentHighScore.score = score;

     //add to the array
    [highScores addObject:currentHighScore];
    [currentHighScore release];

    }

return highScores;

// method which use the first method

//retrieve with retain to keep.

    highScoreList = [[HighScoreViewController getHighScores:NormalGameModeXML]retain] ; 

    HighScore *currentHighScore;

    int count = [highScoreList count];

    for (int i = 0; i < count ; i++)
    {
        currentHighScore = [highScoreList objectAtIndex:i];
    }

这是有效的,但是当然我对mutable中未释放的所有对象都有内存泄漏。 但是如果我试图通过这个来释放mutable和mutable本身的对象:

//remove Mutable array content.
//[highScoreList removeAllObjects] ;
//[highScoreList release];

我的应用已退出。

您是否有解决方案以避免内存泄漏并将其清理干净?

2 个答案:

答案 0 :(得分:4)

尝试使用NSZombieEnabled检查EXC_BAD_ACCESS的原因..

HowTo is found here..

答案 1 :(得分:1)

    //[highScoreList removeAllObjects] ;
    //[highScoreList release];

在发布之前无需removeAllObjects

请注意,如果您在取消分配后使用highScoreList,则您的应用会在您描述时崩溃。即如果你在上面使用highScoreList BOOM

您可以将highScoreList设置为nil,但更好的解决方案是在您认为应该使用对象之后理解为什么使用该对象。

而且,一如既往:

如果发生崩溃,则会有回溯。发布。