Başka birinin kodunu inceledim ve sahip olmadıkları bir NSString'de 'release' olarak adlandırıldıklarını fark ettim (hiçbir zaman hiçbir yerde tahsis/tutma/kopyalama ve mülk olmadı). Bu bana biraz garip geldi ve bana 'sahip' olmayan ya da ref sayısı zaten 0 olan bir nesne üzerinde 'bırakma' dediğinizde garip bir davranış ortaya çıkabilir mi diye merak ettim mi? Aşağıdaki kod uyarıları olmadan derler/çalışır, bu yüzden sorun yok sanırım ama sadece merak ettim.'Release' çağrısı çok mu fazla?
// Releasing an object I don't own
NSString *notMyString = [NSString stringWithString:@"Not mine."];
[notMyString release]; // Ignored?
// Releasing an object I own, twice
NSString *myString = [[NSString alloc] initWithString:@"Mine."];
[myString release]; // Ref count = 0
[myString release]; // Ref count = ?
Kodun "işleyişinin" nedeni, NSString'in -initWithString'in: iletilen dizenin sabit bir dize olduğunun ve dolayısıyla yeni bir ayırmaya gerek duyulmamasıdır. Sabit dizeler tutma/bırakmayı etkin bir şekilde göz ardı ettiğinden, kod tesadüfi olarak çalışır. – bbum