setValue:forKey:
メソッドを使用してNSMutableDictionary
に項目を追加すると(NSObject
に一般化されると仮定します)、辞書には2番目のパラメータのNSString
が保持されますか?例えば[NSMutableDictionary setValue:value forKey:key]はNSStringキーを保持していますか?
:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSString *theString = @"hello";
int i;
for (i=0; i<[theString length]; i++){
NSNumber *myInt = [NSNumber numberWithInt:i];
NSString *character = [NSString stringWithFormat:@"%C",[theString characterAtIndex:i]];
[dict setValue: myInt forKey:character];
}
[dict release];
[pool release];
は明らかに、ループ内myInt
を解放する理由はありませんが、それは、それがコードの最後まで解放することができないdict
によって保持されます。しかし、同じことがcharacter
の真実ですか?私の考えは、もしNSMutableDictionary
が他の方法で文字列を格納すると、ループの周りに一時的なプールを作成し、辞書のリリースまで待つのではなく、それらの文字列を解放することができます。
私はそれがNSConstantString
であれば、私はstringWithFormat
が保持する必要があるだろうが、それはケースのように思われないNSString
オブジェクトを返すことを期待するようcharacter
のretainCount
が7FFFFFFFである理由としても興味があります。
10.4以降のコードでは、代わりに[プールドレイン]を使用することをお勧めします.GCがオンの場合、ドレインはヒントとして役立つかもしれません古い参照を収集する時間ですが、リリースはノーオペレーションになります。 GCをオフにすると、それらは同じように機能します。 –
これは古い質問ですが、代わりに 'setObject:forKey:'を使用することを意味します。 [ここを参照](http://stackoverflow.com/questions/1249634/wheres-the-difference-between-setobjectforkey-and-setvalueforkey-in-nsmutabl) –