无法释放变量ios

时间:2013-04-08 13:47:07

标签: ios objective-c memory-management

我的方法是

-(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];时 - 但是出了点问题并且我的方法崩溃了。无法理解什么是错的..正如我从内存泄漏仪器中看到的 - 我需要释放这个变量..有什么帮助?

3 个答案:

答案 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];

发布了它