0

この状況を簡潔に処理する方法。私は声明で適切にリリースcontactDictionaryしていません...if

    NSNumber *pIDAsNumber;
     ...        
    NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionaryWithDictionary:[defaults dictionaryForKey:kContactDictionary]];
    if (!contactDictionary) {
            contactDictionary = [[NSMutableDictionary alloc] initWithCapacity:1];
    }
    [contactDictionary setObject:pIDAsNumber forKey:[myClass.personIDAsNumber stringValue]];
    [defaults setObject:contactDictionary forKey:kContactDictionary];
4

2 に答える 2

3

通常、[NSMutableDictionary dictionaryWithCapacity:1]alloc/initの代わりに使用します。これにより、メモリ管理の観点から、上記の辞書と同じように動作する自動リリース辞書が提供されます。でも...

この特定のケースでは、if句が真になることはありません(メモリが不足している場合を除きます。メモリが不足している場合は、より大きな問題が発生します)。-dictionaryWithDictionary:nilが渡された場合、nilではなく空のディクショナリを返します。したがって、-dictionaryForKey:nilを返したとしても-dictionaryWithDictionary:、追加する空の可変辞書を作成します。

于 2010-04-22T23:26:37.093 に答える
0

常に辞書を返すifため、ステートメントを完全に削除できます。-[NSMutableDictionary dictionaryWithDictionary:]

また、[NSMutableDictionary dictionaryWithCapacity:1]空の自動解放された可変辞書を取得するために使用しないでください。を使用するだけ[NSMutableDictionary dictionary]です。

于 2010-04-23T01:46:22.740 に答える