Правила ARC для iOS довольно просты, как описано в Основные правила Apple по управлению памятью .
Методы, чье имя начинается с alloc
, new
, copy
или mutableCopy
, не требуют вызовов на retain
. Напротив, если вы назовете это, вы создадите утечку памяти, потому что будет retain
слишком много. Но они требуют release
или autorelease
. Эти экземпляры объектов являются теми, которые вы создали, и в Objective-C они автоматически сохраняются при создании.
aUIImage
построен с использованием alloc
, вы являетесь его владельцем и несете ответственность за его выпуск с помощью release
. С другой стороны, у вас нет aData
, и он будет обрабатываться системой.
Еще одна вещь, которую нужно иметь в виду, это то, что для объектов, которыми вы не владеете, вам может потребоваться вызвать как retain
, так и release
, чтобы сохранить экземпляр объекта живым, пока вы его используете. Поскольку полученный объект обычно гарантированно остается действительным в методе, в котором он был получен, вам не нужно вызывать retain
и release
при aData
в вашем коде.
Метод retainCount
возвращает текущий счетчик ссылок экземпляра объекта Objective-C. Это число является чисто информативным и не имеет значения для отладки под iOS или macOS, однако оно достаточно хорошо, чтобы показать взаимодействие между Objective-C и управлением памятью Delphi, и иногда может быть полезным.
Из документации Apple о retainCount :
retainCount
- Не используйте этот метод
Этот метод не имеет значения при отладке проблем управления памятью.
Поскольку любое количество объектов каркаса могло сохранить объект в
Для того, чтобы держать ссылки на него, в то же время авторелиз
пулы могут содержать любое количество отложенных выпусков на объекте,
маловероятно, что вы сможете получить полезную информацию с помощью этого метода.