-1

NSJSONSerialization を使用する機能があります。200以上のオブジェクトになる可能性があるため、適切なリリース/メモリ管理を行いたいです。

for (NSDictionary *dict in visitsAndQuestionnaires) {
    NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:filePath];            
    [is open];
    if (is) {
        JSON = [NSJSONSerialization JSONObjectWithStream:is options:0 error:nil];
        if (![JSON respondsToSelector:@selector(objectForKey:)]) {
            JSON = nil;
        }
        [is close];
    }
    [is release];

    if (JSON) {
        // HERE MY FUNCTION TO CREATE A LAYOUT BASED ON JSON
    }
    // WHEN FUNCTION WITH JSON IS DONE:
    if (JSON) {
        //JSON = NIL;
        [(id)JSON release];
    }
}

219 オブジェクトに対してのみ機能する関数よりも、オブジェクト 219 でのみアプリケーションがクラッシュし、次のコンソール ログが表示されます。

 -[CFDictionary release]: message sent to deallocated instance 0x26a13ca0

JSONがまだ存在し、これが機能する場合にのみJSONをリリースしますが(プロファイラーで確認できます)、最後のオブジェクトを解放しようとしたときにのみ、すでになくなっているように見えます。

どうすればこれを修正できますか? このリリース機能が機能するように?

4

2 に答える 2

2

このNSJSONSerializationクラスは、自動解放されたオブジェクトを返します。リリースしないでください。

于 2013-07-10T11:17:29.997 に答える
0

関数ループで Autoreleasepool を作成することが解決策でした。皆さんに感謝します!今日何かを学んだ..

于 2013-07-10T11:59:45.903 に答える