我想弄清楚为什么我会通过此代码获得EXC_BAD_ACESS
。我没有clu。任何人都可以帮助我。
- (void)loadJsonFile:(NSString*)fileName {
NSError *error = nil;
NSData *jsonData = [[[NSString alloc]
initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:fileName ofType:@"json"]
encoding:NSUTF8StringEncoding error:&error]
dataUsingEncoding:NSUTF8StringEncoding];
jsonDic = [[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error] retain];
[jsonData release];
}
如果我正在评论“[jsonData release];
”行,那么一切正常。但为什么 ?我分配jsonData
,用数据填充它并将其传递给NSJSONSerialization
以获取jsonDic。在我进行序列化之后,我发布jsonData
并想要使用jsonDic,但是在“[jsonData release];
”之后的一段时间我得到“EXC_BAD_ACCESS
”异常。
我没有任何帮助,感谢任何帮助。
答案 0 :(得分:2)
您发布jsonData
,但您从未保留过它。静态分析器(菜单"Product" ➞ "Analyze"
)会向您显示此问题。此外,您还没有发布您正在分配的NSString
。
这样做:
- (void)loadJsonFile:(NSString*)fileName {
NSError *error = nil;
NSData *jsonData = [[[[[NSString alloc]
initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:fileName ofType:@"json"]
encoding:NSUTF8StringEncoding error:&error] autorelease]
dataUsingEncoding:NSUTF8StringEncoding] retain];
jsonDic = [[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error] retain];
[jsonData release];
}
您可能需要考虑使用ARC(自动引用计数)。 Xcode可以使用菜单"Edit" ➞ "Refactor" ➞ "Convert to Objective-C ARC…"
几乎完全自动转换您的项目。手动管理内存的原因很少。