【发布时间】:2010-10-06 15:44:52
【问题描述】:
我创建/推送我的 ViewController,显示一些信息并导航回我的 RootViewController。当我向后导航时,应用程序崩溃 (EXC_BAD_ACCESS)。
使用 Instruments,我发现我的 ViewController 的 dealloc 被调用,它释放了我的包装类。在我的包装类中,也调用了 dealloc 方法。此 dealloc 释放 parsedJson(保留属性),然后应用程序崩溃。奇怪的是,尽管只有一个 malloc 和一个释放,但保留计数从 1 下降到 -1。
如果我保留返回的结果parsedJson,应用不会崩溃,我也不会发现泄漏。
SBJsonParser *JSONParser = [SBJsonParser new];
id parsedJson = [[JSONParser objectWithString:jsonString error:NULL] retain];
我无法发布/自动释放,因为那样应用程序会再次崩溃。
使用 NSZombieEnabled 我得到
* -[CFDictionary release]:消息发送到释放的实例 0x6d51aa0
我做出改变后得到了这个僵尸。在我为我的视图控制器使用属性和接口生成器之前,我没有崩溃,因为视图控制器没有立即释放。现在我正在这样做:
MyViewController *myViewController = [[MyViewController alloc] init];
[[self navigationController] pushViewController:myViewController animated:YES];
[myViewController release];
myViewController = nil;
错误在哪里?我不能在没有发布的情况下保留parsedJSON。除了dealloc,我永远不会释放parsedJson。使用的库有错误吗?
【问题讨论】:
标签: iphone cocoa-touch json memory-management exc-bad-access