Что случилось с retainCount в Xcode 4.2? - PullRequest
0 голосов
/ 03 ноября 2011

Я заметил, что после обновления моего Xcode до 4.2 retainCount всегда равен -1.Я не использую ARC в своем проекте, и я даже пытался создавать новые проекты и отключил опцию ARC в настройках проекта, но следующие строки работают очень странно:

NSString *string = [[NSString alloc] init];
NSLog(@"%i", [string retainCount]);   //-1
[string retain];
[string retain];
[string retain];
NSLog(@"%i", [string retainCount]);   //still -1
[string release];
[string release];
[string release];
NSLog(@"%i", [string retainCount]);   //still -1

Я что-то пропустил?Я думал, что если опция ARC отключена, проект будет работать точно так же, как и раньше ..

1 Ответ

6 голосов
/ 03 ноября 2011

Во-первых, позвольте мне предварить это, сказав, что если вы звоните retainCount, вы, вероятно, делаете что-то не так.Этот метод должен использоваться только людьми, пишущими низкоуровневый код инфраструктуры, и даже тогда только при отладке.Объекты могут быть задержаны и автоматически освобождены за вашей спиной, так что вызов -retainCount очень вводит в заблуждение.

В любом случае, я подозреваю, что ответом является то, что [[NSString alloc] init] возвращает одноэлементный объект.Он неизменный и пустой, поэтому на самом деле нет причин, по которым он должен создать для вас совершенно новую строку, когда он может просто вернуть @"".

...