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

これにより、NSMutableDictionaryに型キャストした自動解放ID が返されました。

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

そして、あなたはそれをもう一度解放しました[temp release];

于 2013-04-08T13:50:19.303 に答える