Или, почему я не использовал keepCount
на моих летних каникулах
Этот пост предназначен для того, чтобы запросить подробные описания того, почему и почему этот печально известный метод, keepCount
, для консолидации релевантной информации, плавающей вокруг SO. *
Основы: Каковы официальные причины не использовать keepCount
? Есть ли вообще ситуация , когда это могло бы быть полезно? Что следует сделать вместо этого? ** Не стесняйтесь редактировать.
Историческая справка / пояснение: Почему Apple предоставляет этот метод в протоколе NSObject
, если он не предназначен для использования? Использует ли код Apple для каких-то целей keepCount
? Если да, то почему это где-то не спрятано?
Для более глубокого понимания: Каковы причины того, что у объекта может быть другой счетчик сохраняемых данных, чем предполагалось из пользовательского кода? Можете ли вы привести примеры *** стандартных процедур, которые может использовать код фреймворка, которые вызывают такую разницу? Известны ли случаи, когда счетчик удержания всегда отличается от того, что может ожидать новый пользователь?
Что еще, по вашему мнению, заслуживает упоминания о keepCount
?
*
Кодеры, которые плохо знакомы с Objective-C и Cocoa, часто сталкиваются со схемой подсчета ссылок или, по крайней мере, неправильно ее понимают. В инструкциях может упоминаться счетчик сохранения, который (согласно этим пояснениям) увеличивается на единицу, когда вы вызываете keep
, alloc
, copy
и т. Д. по одному, когда вы вызываете release
(и в какой-то момент в будущем, когда вы вызываете autorelease
).
Подающий надежды хакер Cocoa, Крис, мог легко понять, что проверка счетчика сохраненных объектов может быть полезна для решения некоторых проблем с памятью, и, о чудо, для каждого объекта доступен метод, называемый keepCount
! Крис вызывает keepCount
для пары объектов, и этот слишком высокий, а второй - слишком низкий, и что, черт возьми, происходит ?! Итак, Крис делает сообщение на SO: «Что не так с моим управлением памятью?» а затем появляется рой , буквы, говорящие: «Не делайте этого! Нельзя полагаться на результаты», что хорошо, но наш бесстрашный программист может захотеть более глубокого объяснения.
Я надеюсь, что это превратится в FAQ, страницу с хорошими информационными эссе / лекциями от любого из наших экспертов, которые склонны писать такие, на которые можно будет указать новым Какао-головам, когда они задаются вопросом о keepCount
.
** Я не хочу делать это слишком широко, но здесь могут быть уместны конкретные советы из опыта или документы по проверке / отладке пар сохранения и выпуска.
*** В фиктивном коде; очевидно, что широкая публика не имеет доступа к актуальному коду Apple.