Я предпочитаю «старый способ», потому что я предпочитаю последовательность и (что более важно) инкапсуляцию.
Согласованность
лично, я просто хочу хорошее представление оразмер и сложность объекта, если посмотреть на одно место.
пример: когда вы реализуете dealloc, предпочитаете ли вы ссылаться на несколько мест?не я.это сложнее, чем необходимо.я не хочу выяснять, что мне нужно очистить, создав набор из всех ivars и свойств.одних свойств недостаточно, потому что они также оказываются в разных местах (интерфейс, частные категории) = \
, поэтому меньшим злом имо является объявление иваров, чтобы все было в одном месте, и у вас есть быстрая ссылка насложность объекта (а также хороший ввод для некоторых генераторов кода).
Инкапсуляция
, когда вы видите программу, в которой большинство свойств иваров / объектов видны и читаются/ доступный для записи ... это не OOD, это беспорядок.когда вам нужно описать это вежливо, это анти-паттерн 'Object Orgy' .к сожалению, это довольно часто встречается в программах objc (частично из-за ограничений языка / времени выполнения).
ivars с префиксами подчеркивания: лично я не использую это соглашение в objc.если так написан их код, то продолжайте с ним (ничего страшного).
Они также сказали, что они используют свойства только тогда, когда нужен внешний доступ к ivars, и для внутреннего доступа онииспользуйте прямые ивары (для пользовательских классов).
вправо - вот где попытки инкапсуляции входят в картину.продолжайте в том же духе и принимайте правильную инкапсуляцию.
Мне сказали, что они делают это, потому что у них были странные утечки, которые иногда возникали при использовании пользовательских классов и обнулении их свойств в viewDidUnload (потому чтоустановка свойств в nil иногда не высвобождает эти объекты ivar)
в идеале, они дадут вам лучшее объяснение (и дойдут до корня конкретной проблемы в то время).
вполне вероятно, что их таинственная программа (программы) недостаточно четко отличалась от ее участников (данных), интерфейса и выполнения.когда они совпадают, нередко теряют право собственности.этот случай является общим признаком дезорганизации и / или реализации, выходящей за рамки ожиданий.если вы правильно организовываете / пишете классы, слежение за ivar / property очень просто (по-видимому, они добиваются прогресса, поддерживая инкапсуляцию).кроме того, защищенный является видимостью по умолчанию;я рекомендую использовать private как ваше значение по умолчанию.
Просто интересно, почему я должен беспокоиться об использовании объявления ivar, когда использование свойств и synthesize делает все необходимые вещи.Я даже могу получить доступ к иврам напрямую, используя их имена без self в dealloc.Итак, есть ли у кого-нибудь проблемы с этим, или многие из вас все еще придерживаются старой декларации декларации?
- программа, которая хорошо разработана, не состоит из больших двоичных объектов данных (с публичным доступом или свойством)доступные переменные).
- в большинстве случаев состояние (например, ivars) не должно напрямую отображаться на интерфейс.
- держать ваши данные и имплементации хорошо скрытыми от других.
- даже 'Свойства private могут быть легким источником ошибок (их селекторы могут быть выполнены или переопределены).
- , когда по умолчанию используется private, а ivar действительно недоступен извне, вы можете уменьшить lot сложности.
так что ... я вижу, как они делают этот запрос, чтобы сделать вашу жизнь проще, уменьшив внешнее воздействие на состояние и, в конечном счете, на сложность программы.они признались, что в прошлом имели проблемы, и они пытаются использовать инкапсуляцию, чтобы уменьшить сложность и вероятность ошибок.хорошо для них.
я знаю, некоторые программисты просто предпочитают все публично видимое и изменчивое - написание программ для поддержки этого уровня сложности не является эффективным использованием времени, и реальность такова, что большинство людей, которые делают пишите таким образом, не имейте предвидения или терпения, чтобы действительно написать такую программу правильно, и тогда это вызывает головные боли для других.Конечно, это могло сработать для вас в прошлом, но это наивный подход, и вы не можете позволить себе писать все программы, работая в команде.следовательно, вы не можете предполагать, что они прочитали и поняли каждую программу, которую вы пишете в полном объеме.
делает ваши программы устойчивыми к ошибкам пользователей, скрывая то, что вы можете, и согласовывая их со стилем вашей команды.1061 *
(технически есть несколько дополнительных преимуществ, которые я не буду здесь подробно описывать)