Вы никогда не должны использовать -retainCount
, потому что это никогда не говорит вам ничего полезного. Реализация платформ Foundation и AppKit / UIKit непрозрачна; вы не знаете, что хранится, почему оно сохраняется, кто его хранит, когда оно сохраняется и т. д.
Например:
- Вы могли бы подумать, что
[NSNumber numberWithInt:1]
будет иметь retainCount
1. Это не так. Это 2.
- Вы могли бы подумать, что
@"Foo"
будет иметь retainCount
1. Это не так. Это 1152921504606846975.
- Вы могли бы подумать, что
[NSString stringWithString:@"Foo"]
будет иметь retainCount
1. Это не так. Опять же, это 1152921504606846975.
По сути, поскольку что-либо может сохранить объект (и, следовательно, изменить его retainCount
), и поскольку у вас нет источника для большей части кода, выполняющего приложение, объект retainCount
не имеет смысла.
Если вы пытаетесь выяснить, почему объект не освобождается, используйте инструмент «Утечки» в инструментах. Если вы пытаетесь выяснить, почему объект был освобожден слишком рано, используйте инструмент Зомби в Инструментах.
Но не используйте -retainCount
. Это действительно бесполезный метод.
редактировать
Пожалуйста, перейдите на http://bugreport.apple.com и попросите, чтобы -retainCount
устарело. Чем больше людей просят об этом, тем лучше.
edit # 2
В качестве обновления [NSNumber numberWithInt:1]
теперь имеет retainCount
9223372036854775807. Если ваш код ожидал, что он будет равен 2, ваш код теперь не работает.