Как уже упоминали другие, -retainCount
практически бесполезен.Когда вы новичок в управлении памятью / подсчете ссылок в Objective-C, иногда может возникнуть соблазн попытаться использовать - retainCount
, чтобы помочь понять, как работает подсчет ссылок, но в действительности это может (на первый взгляд) сбить с толкуbest.
Код, который вы разместили, сам по себе потенциально опасен, в зависимости от окружающего контекста использования someObject
.Это также может быть опасно применительно к другим ситуациям, которых вы не ожидали.Возьмем константу NSString
s, созданную с использованием директивы компилятора @"a string"
: эти строки созданы и не предназначены для выпускаПоэтому применение вашего кода, как в следующем примере, приведет к бесконечному циклу:
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *string = @"theString";
NSLog(@"retainCount == %lu", (unsigned long)[string retainCount]);
for (NSUInteger i = 0; i < [string retainCount]; i++) {
[string release];
}
[pool drain];
return 0;
}
Это напечатает:
2011-06-30 08:40:16.287 retainCount[35505:a0f] retainCount == 1152921504606846975
, а затем перейдет в бесконечный цикл.