@Michal: пока объект находится в активном использовании (о чем свидетельствует счет сохранения> 1), его удаление из кэша не освобождает память. Поскольку существует вероятность повторного использования объекта, целесообразно придерживаться ссылки. Если объект удаляется из кэша, а затем повторно кэшируется до того, как предыдущий экземпляр будет выпущен тем, кто его держал, у вас будет избыточный экземпляр, плавающий вокруг.

очему я не использовалretainCount На моих летних каникулах

Этот пост предназначен для получения подробной информации о причинах и причинах этого печально известного метода,retainCount, для того, чтобы консолидировать соответствующую информацию, плавающую вокруг SO. *

Основы: Какие официальные причины не использоватьretainCount? Есть ли когда-нибудь ситуациявообще когда это может быть полезно? Что нужно сделать вместо этого? ** Не стесняйтесь редактировать.

Историческая справка: почему Apple предоставляет этот метод вNSObject протокол если он не предназначен для использования? Код Apple полагается наretainCount для какой-то цели? Если так, то почему это не спрятано где-нибудь?

Для более глубокого понимания: каковы причины того, что объект может иметь другое количество сохранений, чем предполагалось бы из пользовательского кода? Можете ли вы привести примеры *** стандартных процедур, которые может использовать базовый код, которые вызывают такую ​​разницу? Известны ли случаи, когда счет удержаниявсегда отличается от того, что может ожидать новый пользователь?

Все, что вы думаете, стоит упомянуть оretainCount?

* Кодеры, которые плохо знакомы с Objective-C и Cocoa, часто сталкиваются или, по крайней мере, неправильно понимают схему подсчета ссылок. В объяснениях учебника может быть упомянуто сохранение количества, которое (согласно этим объяснениям) увеличивается на единицу, когда вы звонитеretain, alloc, copyи т. д., и вниз на один, когда вы звонитеrelease (и в какой-то момент в будущем, когда вы позвонитеautorelease).

Таким образом, начинающий хакер Какао, Крис, может довольно легко прийти к мысли, что проверка счетчика сохранения объекта будет полезна для решения некоторых проблем с памятью, и, о чудо, есть метод, доступный для каждого объекта, который называетсяretainCount! Крис звонитretainCount на пару объектов, а этот слишком высокий, а тот слишком низкий, и что, черт возьми, происходит ?! Итак, Крис делает сообщение на SO: «Что не так с моим управлением памятью?» и затем рой <bold>, <большие> буквы опускаются, говоря: «Не делай этого! Ты не можешь положиться на результаты», что хорошо, но наш отважный кодировщик может захотеть более глубокого объяснения.

Я надеюсь, что это превратится в FAQ, страницу хороших информационных эссе / лекций от любого из наших экспертов, которые склонны написать один, на которые можно указать новые головы какао, когда они задаются вопросом оretainCount.

** Я не хочу делать это слишком широким, но конкретные советы из опыта или документы по проверке / отладке сохраняют и выпускают пары могут быть уместными здесь.

*** в фиктивном коде; Очевидно, что широкая публика не имеет доступа к фактическому коду Apple.

Ответы на вопрос(2)

Ваш ответ на вопрос