Ios 保留/释放错误
我试图弄明白为什么我会通过这段代码获得Ios 保留/释放错误,ios,exc-bad-access,retaincount,Ios,Exc Bad Access,Retaincount,我试图弄明白为什么我会通过这段代码获得EXC\u BAD\u ACESS。我没有俱乐部。有人能帮我吗 - (void)loadJsonFile:(NSString*)fileName { NSError *error = nil; NSData *jsonData = [[[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle]
EXC\u BAD\u ACESS
。我没有俱乐部。有人能帮我吗
- (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];
}
如果我注释掉“[jsondatarelease];
”行,那么一切都正常。但是为什么呢?我分配jsonData
,用数据填充它并将其传递给NSJSONSerialization
,以获取jsonDic。在序列化之后,我释放了jsonData
并想要使用jsonDic,但是在“[jsonData release];
之后的一段时间,“我得到了”EXC\u BAD\u ACCESS
异常
我没有clu,非常感谢您的帮助。您发布了
jsonData
,但您从未保留过它。静态分析仪(菜单<代码>“产品”➞ “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可以通过菜单“编辑”几乎完全自动地转换您的项目➞ “重构”➞ “转换为目标C弧…”。保持手动管理内存的理由很少。
Thx很多。我现在意识到a)我正在创建一个从未发布过的字符串对象b)我正在发布我没有的数据对象。你使用的是什么版本的XCode?我使用的是3.2.5,我看不到弧。。。在任何菜单中。。。