-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 仍然存在时才发布它并且这有效(我可以在探查器中看到它),但它看起来像当它试图释放最后一个对象时它已经消失了。

我怎样才能解决这个问题?所以这个发布功能有效吗?

4

2 回答 2

2

该类NSJSONSerialization返回一个自动释放的对象。只是不要释放它。

于 2013-07-10T11:17:29.997 回答
0

在函数循环上创建一个 Autoreleasepool 是解决方案。我要感谢你们!今天学到东西了。。

于 2013-07-10T11:59:45.903 回答