Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 保留/释放错误_Ios_Exc Bad Access_Retaincount - Fatal编程技术网

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,我看不到弧。。。在任何菜单中。。。