Допустимое использование средств доступа в init и dealloc методах?

Уже существует некоторый очень хороший совет здесь, но у Вас все еще будет задание для убеждения коллег, если все, необходимо создать резервную копию Вас, будет несколькими поддерживающими комментариями stackoverflow. И, если они так скептичны, как они звучат, Вы испытываете необходимость в большем количестве боеприпасов. Во-первых, получите копию "Шаблонов Martin Fowler Архитектуры предприятия", которая содержит подробный анализ множества методов доступа к данным. Считайте его. Затем вынудите их всех считать его.

сделанный Job.

24
задан Community 23 May 2017 в 11:43
поделиться

2 ответа

Я понимаю, что текущее поведение 10.5, при котором синтезированные ivars не доступны напрямую, Apple считает ошибкой; вы должны иметь к нему прямой доступ, но не можете.

Следовательно, вы должны иметь возможность делать:

someObject = nil;

вместо

self.someObject = nil;

. Между тем, использование метода доступа напрямую - единственный способ сделать это без предоставление явного ivar.

Обновление : эта ошибка исправлена; теперь вы можете сделать someObject = nil нормально.

8
ответ дан 29 November 2019 в 00:24
поделиться

РЕДАКТИРОВАТЬ (13 февраля 2013 г.): Как отмечено в моем комментарии ниже, особенно после добавления ARC, я изменил свое мнение по этому поводу. До ARC я видел много ошибок, вызывающих сбои из-за неправильного назначения ivar в init . ИМО, особенно работая с младшими командами, редкие проблемы с использованием аксессоров в init перевешивались общими ошибками доступа к ivar. Поскольку ARC устранил подобные ошибки, редкие, но возможные ошибки, которые может вызвать использование аксессора в init , более важны, поэтому я переключился на поддержку прямого использования ivars в init и dealloc , и только в этих местах; аксессоры везде, где это возможно (очевидно, вы не можете использовать аксессоры внутри самого аксессора .... )


PRE-ARC answer

Я категорически не согласен с теми, кто возражает против аксессоров в -init . Практически во всех случаях это очень хорошее место для использования средств доступа, и оно сохраняет множество ошибок, которые я видел в новых кодировщиках Cocoa, которые неизменно не удается сохранить при назначении в -init .

- dealloc - более сложный вызов. У меня есть естественная склонность использовать там аксессоры (чтобы они использовались везде), но это может вызвать головную боль из-за KVO (или даже NSNotifications, если вы разместите уведомление об изменении в своем сеттере). Тем не менее, хотя я не использую аксессоры в -dealloc , я считаю это очень спорным, и Apple очень непоследовательна по этому поводу (мы знаем, что они вызывают setView: в UIViewController -dealloc например).

В любом случае, Я бы сказал, что недостаточное использование аксессуаров вызвало в 100 раз больше ошибок чрезмерного использования. Я бы всегда ошибался в их использовании, за исключением случаев, когда есть веская причина не делать этого.

9
ответ дан 29 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: