我的方法是
-(void)readAppFile
{
NSString *plistPath = [self getDataFileDestinationPath];
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSMutableDictionary *temp = (NSMutableDictionary *) [NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
if (!temp) {
NSLog(@"Error reading plist: %@, format: %d", errorDesc, format);
}
items = [[temp objectForKey:@"Items"] mutableCopy];
NSLog(@"temp %lu", (unsigned long)[temp retainCount]);
[temp release];
}
当我添加[temp release];
时 - 但是出了点问题并且我的方法崩溃了。无法理解什么是错的..正如我从内存泄漏仪器中看到的 - 我需要释放这个变量..有什么帮助?
答案 0 :(得分:3)
[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
方法返回自动释放的对象。
和自动释放池再次发送释放消息。
查看此链接,了解如何使用自动释放池https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
答案 1 :(得分:1)
查看您的代码,您应该发布items
而不是发布temp
。
答案 2 :(得分:0)
这会修复一个自动释放的 ID,您将其转换为NSMutableDictionary。
NSMutableDictionary *temp = (NSMutableDictionary *) [NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
然后你再次通过[temp release];