Obj-c,释放对象的校验和不正确,被释放后可能被修改

我得到这个错误

malloc: * * * error for object 0x8a591d4: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug No memory available to program now: unsafe to call malloc No memory available to program now: unsafe to call malloc 

它来自这条线

 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]; NSData *plistData = [NSData dataWithContentsOfFile:plistPath]; NSDictionary *loadedPlist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:0 format:NULL errorDescription:NULL]; <<< this line 

plistData的值设置为摘要不可用

我不确定从哪里开始?

编辑 – 增加了更多的代码

我要添加另一个答案:也有可能你已经有了堆,而你在propertyListFromData上失败了:只是因为它做了很多的分配,碰巧碰到了不好的地方。 因此,在Xcode中编辑您的scheme,并确保您已经检查了所有内存pipe理项目(在“运行”任务的“诊断”选项卡中)。

你有没有在malloc_error_break中设置断点? 这至less给你一个回溯,你可能会看到一些注意事项。 如果没有别的,你可以尝试从GDB控制台po plistData

顺便说一句,虽然它可能没有帮助,我会认为dictionaryWithContentsOfFile:会更简单。

Info.plist如何被存储? 这是一个标准的plist / xml文件吗? 下面的问题是否可以解决您正在尝试解决的问题,并可能防止此问题的发生?

 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]; NSDictionary *loadedPlist = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; 

或者,如果你想要一个自动释放的对象…

 NSDictionary *loadedPlist = [NSDictionary dictionaryWithContentsOfFile:plistPath];