NSInvocation
сохраняет свою цель, потому что ей нужно, чтобы цель все еще была рядом, когда срабатывает таймер. Этот факт как бы скрыт в документации для -[NSInvocation retainArguments]
:
Если получатель еще не сделал этого, сохраняет цель [...]
NSTimer
всегда инструктируют своих NSInvocation
сохранять свои аргументы, [...] потому что обычно срабатывает задержка до NSTimer
.
Это то, что имеется в виду, когда кто-то говорит: «Классы фреймворка могут сохранять вещи без вашего ведома». Не волнуйтесь о абсолютных счетах удержания .
Вместо этого вам, возможно, следует беспокоиться * о том, что каждый раз, когда вы запускаете этот код (который, как вы, похоже, указываете, случается довольно часто), вы создаете новый NSInvocation
и повторяющийся экземпляр NSTimer
с точно те же атрибуты, что и в прошлый раз, что кажется пустой тратой памяти.
* Если только это не тестовый код.