Есть предложения?
Да.
Не звоните retainCount
В лучшем случае вводит в заблуждение и в большинстве случаев совершенно бесполезно.
Как сказал Джонатан, вы сохраняете только баланс, который вы вызываете с помощью различных перечисленных методов. То есть обрабатывает счет удержания как дельта . Если вы увеличите его, вы должны уменьшить его.
В этом конкретном случае «initExpression()
» возвращает либо сохраненный, либо автоматически освобожденный объект. Вы не можете узнать с помощью retainCount
, поскольку autorelease
не сразу уменьшает этот счет (это, по сути, задержка release
).
(Нет, initExpression()
не перепутал вопрос или этот ответ - retainCount
бесполезен для "обнаружения" автоматически выпущенного объекта.)
В комментарии вы сказали:
Я обеспокоен
влияние на производительность любого
автоматическое освобождение объектов или итерация
снова через массив, чтобы отправить
отправить сообщение всем объектам.
Обеспокоены тем, что вы измерили проблему или потому, что кажется, что это может быть проблемой?
Не тратьте время на исправление проблем с производительностью, которые не были определены количественно. Крайне маловероятно, что объекты, выпущенные вручную или автоматически выпущенные, будут проблемой в этом контексте. Это может произойти, но только если у вас нет N тысяч объектов (в этот момент у вас может возникнуть проблема с памятью), или вы много раз вызываете этот код.
Предложение Джонатана полностью отказаться от массива C!