0

我的方法是

-(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];- 但出了点问题并且我的方法崩溃了。不明白出了什么问题..正如我从内存泄漏工具中看到的那样 - 我需要释放这个变量..有什么帮助吗?

4

3 回答 3

3

[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];方法返回自动释放的对象。并且自动释放池再次发送释放消息。

查看此链接,了解如何使用自动释放池https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

于 2013-04-08T13:49:51.403 回答
1

查看您的代码,您应该发布items而不是发布temp

于 2013-04-08T13:58:32.240 回答
0

这返回了一个自动发布的id,您将其类型转换为 NSMutableDictionary。

NSMutableDictionary *temp = (NSMutableDictionary *) [NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];

然后你再次发布它[temp release];

于 2013-04-08T13:50:19.303 回答