- [CFDictionary release]:发送到解除分配的实例0x26a13ca0的消息

时间:2013-07-10 11:15:17

标签: ios

我有一个使用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并且这可以工作(我可以在探查器中看到它),但它看起来就像它试图释放它已经消失的最后一个对象。

我该如何解决这个问题?这个释放功能有效吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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