Вызов метода установки свойства со значением nil - PullRequest
1 голос
/ 10 июля 2010

Предположим, у меня есть свойство с именем sampleObject.

В методе dealloc, каким должен быть лучший способ управления памятью?

Вариант 1:

self.sampleObject = nil; //This will release the sampleObject and set it to nil

Это эквивалентно

[sampleObject release];

sampleObject = nil;

Вариант 2:

Явное освобождение объекта и установка его в ноль

[sampleObject release];

sampleObject = nil;

На мой взгляд, оба добьются одинаковых результатов? Пожалуйста, поделитесь своим мнением.

С уважением, Кришнан

Ответы [ 3 ]

2 голосов
/ 10 июля 2010

В методе dealloc вам следует «освободить» ивар напрямую и установить для него ноль.

Вы делаете это напрямую, потому что это позволяет избежать выполнения любого пользовательского установочного кода, который может существовать в подклассе.

Установка значения nil не является строго необходимой, но это практически ничего не стоит, и вы будете рады, что сделали это во время отладки, поскольку она устраняет висячий указатель.

1 голос
/ 10 июля 2010

Пройдя через установщик свойств, вы получите небольшую дополнительную нагрузку на прямую отправку сообщения release.Таким образом, для синтезированных свойств лучше отправить release.

. Конечно, есть случаи, когда вам нужно вызвать установщик свойства, если логика установщика более сложна (например, свойство резервируетсяпо нескольким переменным и установщик разлагает значение и очищает старую).Однако это не такой распространенный сценарий.

И так как вы освобождаете свой объект, нет необходимости явно задавать переменную поддержки равной nil после ее освобождения.

1 голос
/ 10 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...