1

我正在开发一个测验应用程序。我从 xml 文件中提取问题,解析它并显示随机问题。这些存储在 NSdictionary 和 NSMutableArray 中。该应用程序还播放背景音乐和点击按钮的声音(AVAudioPlayer)。和振动(AudioServicesPlaySystemSound(kSystemSoundID_Vibrate))

在一个特定的函数中,如果我尝试释放我使用的临时变量(IE NSDictionary 和 NSMutableArray),应用程序会在我第二次到达该函数时崩溃。因此,如果我不释放这些,它可以正常工作,但最终会因“EXC_BAD_ACCESS”错误而崩溃。它没有指出任何行或功能。

当我使用“LEAKS”工具时,它显示我有大约 7000 次泄漏。我不明白如何使用该工具,但我确信我没有创建这么多变量,只是一些变量,甚至是我发布的变量。

就在我得到错误“数据格式化程序暂时不可用”之后。

任何想法我做错了什么?F1 :)

PS:我的代码都是简单的东西,加上我不知道问题是什么,因此我不知道在这里发布什么代码?另外我想知道我是否在函数中创建一个 NSString* 以供临时使用,我应该在函数结束时释放它吗?(我确实释放它)编辑:

    -(void) loadQuestion
    { 
    strCorrectAnswer = @"";
    int intQuestionNo;
    NSString *strQuestionNo = [[NSString alloc] init];

    // get random question out  the xml file  
NSDictionary *dctQue = [dctQuestions  objectForKey:strQuestionNo];
// blah blah

    // jumble the answers to   be displaed


NSMutableArray *answerJumble = [[NSMutableArray alloc] init];
NSMutableArray *answers =[NSMutableArray arrayWithObjects:[dctQue objectForKey:@"WrongAnswer1"],[dctQue objectForKey:@"WrongAnswer2"],[dctQue objectForKey:@"WrongAnswer3"],[dctQue objectForKey:@"CorrectAnswer"],nil];

 // blah blah

  /*
[strQuestionNo release];
[answers release];
[answerJumble release]; */  

}

4

2 回答 2

0

您应该阅读一些关于 Cocoa 中的内存管理的内容。请参阅Mac 开发人员中心Cocoa Dev Central 上的教程。iPhone上的内存管理并不难,可惜的是通过反复试验来编码。

于 2010-02-16T06:33:40.050 回答
0

经过一番挖掘,问题是必须重放声音文件。如果我按下一个按钮,并且在我再次按下声音文件完成播放之前,声音文件只播放了一次。导致内存泄漏 3000。

如果我这样做了两次,则应用程序在 6425 泄漏后崩溃。因此出现错误-“数据格式化程序当前不可用”。(我猜)

于 2010-02-17T04:37:44.707 回答