gpt4 book ai didi

ios - 保留/释放错误

转载 作者:行者123 更新时间:2023-11-28 22:51:17 28 4
gpt4 key购买 nike

我想弄清楚为什么我通过这段代码得到 EXC_BAD_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];
}

如果我注释掉“[jsonData release];”行,一切正常。但为什么 ?我分配 jsonData,用数据填充它并将它传递给 NSJSONSerialization 以获取 jsonDic。序列化后,我发布了 jsonData 并想使用 jsonDic,但是在“[jsonData release];”之后的一段时间我得到了“ EXC_BAD_ACCESS”异常。

我没有任何线索,感谢任何帮助。

最佳答案

您释放了 jsonData,但您从未保留它。静态分析器(菜单 “产品”➞“分析”)会向您显示此问题。此外,您不会释放正在分配的 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 几乎可以通过菜单“编辑”➞“重构”➞“转换为 Objective-C ARC…” 几乎完全自动地转换您的项目。继续手动管理内存的理由很少。

关于ios - 保留/释放错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11933754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com