Вызов -retainCount считается вредным

Или, почему я не использовал keepCount на моих летних каникулах

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

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

  2. Историческая справка / пояснение: Почему Apple предоставляет этот метод в протоколе NSObject , если он не предназначен для использования? Использует ли код Apple для каких-то целей keepCount ? Если да, то почему это где-то не спрятано?

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

  4. Что еще, по вашему мнению, заслуживает упоминания о keepCount ?


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

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

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

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

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

38
задан Billy ONeal 8 June 2011 в 01:36
поделиться