1

クイズアプリを開発しています。xml ファイルから質問を取得して解析し、ランダムな質問を表示します。これらは NSdictionary と NSMutableArray に保存されます。また、アプリはボタンをクリックするためのBGMとサウンドを再生します(AVAudioPlayer)。振動( AudioServicesPlaySystemSound(kSystemSoundID_Vibrate))

ある特定の関数で、使用している一時変数 (IE NSDictionary および NSMutableArray) を解放しようとすると、2 回目にその関数に到達したときにアプリがクラッシュします。したがって、これらを解放しないと正常に動作しますが、最終的に「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

少し掘り下げた後、問題はサウンドファイルを再生する必要があることでした。ボタンを押すと、もう一度押すとサウンド ファイルの再生が終了する前に、サウンド ファイルが 1 回だけ再生されました。その結果、3000 のメモリ リークが発生しました。

私がこれを2回行った場合、6425のリーク後にアプリがクラッシュしました。したがって、エラー-「データフォーマッターは現在利用できません」.(推測)

于 2010-02-17T04:37:44.707 に答える
0

Cocoa のメモリ管理について読む必要があります。Mac Developer CenterまたはCocoa Dev Central のチュートリアルを参照してください。iPhoneでのメモリ管理は難しくなく、試行錯誤しながらコーディングするのは残念です。

于 2010-02-16T06:33:40.050 に答える