0

シミュレーターのInstrumentsでアプリを実行してメモリリークをチェックすると、このコードブロックのリークを示しているようです。

for (NSDictionary *messageDict in messageDataArray)
{
    message = [[Message alloc] init];
    ... set some properties on the 'message' object

    [messages addObject:message];
    [message release];
}

明らかに、このループでは、オブジェクトを割り当て/初期化しますが、終了したら解放します。これは、Instrumentsがそのループ内のアクティビティをどのように認識しているかの単なる症状なのか、それとも私が気を失っている(または他の何かを完全に間違っている)のか疑問に思います。

4

2 に答える 2

2

あなたはあなたが作成した各メッセージを隠している...あなたはそれが最終的に(そしてそれ故にその中のもの)漏れないmessagesことを確信していますか?または、初期化子またはプロパティアクセサーでメモリがリークしている可能性がありますか?

于 2010-02-12T18:08:47.517 に答える
1

リークは、リークされたメモリが割り当てられた場所のみを示します...

リークの意味を考えてください。これは、どこかに、何かをリリースするコード行があるはずなのに、そのコード行がないことを意味します。リークは、存在しないコードを表示することはできません。

つまり、そこにあるメッセージオブジェクトの1つが別の場所に保持され、決して手放されないということです。または、メッセージ配列全体がどこかでリークされましたが、その配列の割り当てもリークに表示されます。

于 2010-02-13T02:58:50.930 に答える