, (Ben bu herhangi NSObject
ile genelleştirildiğinde varsayalım) sözlük ikinci parametre muhafaza etmez NSString
setValue:forKey:
yöntemi kullanılarak NSMutableDictionary
öğe eklerken? Örneğin[NSMutableDictionary setValue: Anahtar: key for key: key] NSString anahtarını koruyor mu?
:
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];
Açıkça, döngüde myInt
serbest bırakmak için bir neden yoktur, bunun bu nedenle kod sonuna kadar serbest olamaz dict
ile tutulur. Ama aynı character
doğru mu? Benim düşüncem şudur: NSMutableDictionary
dizgiyi başka bir şekilde saklarsa, o zaman döngü etrafında geçici bir havuz oluşturabilir ve sözlüğün yayınlanmasına kadar beklemek yerine bu dizeleri serbest bırakabilir.
Ben bir NSConstantString
ise, ben istinat gerekir bir NSString
nesneyi döndürmek için stringWithFormat
beklediğiniz gibi character
ait retainCount
7fffffff neden olarak da merak ediyorum, ama bu durum görünmüyor.
Sadece ince bir nokta: 10.4 için kod ve daha sonra, bunun yerine [havuz göçünü] kullanmak genellikle tercih edilir - GC açıkken, drenaj o * kudreti * iyi olmasını bir ipucu sağlar eski referansları toplamanın zamanı, serbest bırakma ise no-op haline gelir. GC kapalıyken, aynı şekilde çalışırlar. –
Bu eski bir sorudur, ancak büyük olasılıkla 'setObject: forKey:' işlevini kullanmak istemişsinizdir. [buraya bakın] (http://stackoverflow.com/questions/1249634/wheres-the-difference-between-setobjectforkey-and-setvalueforkey-in-nsmutabl) –