XCode теперь генерирует пустую категорию.Почему?
-
12-12-2019 - |
Вопрос
Я заметил это при использовании IOS6 Beta 3
Когда я создаю новый подкласс UiviewContoller (никакие другие родительские классы не генерируют это поведение, которое я заметил), файл .m теперь имеет пустую категорию в верхней части файла. В прошлом при изучении категорий я заметил, что некоторые люди будут использовать эту же технику для обозначения частных методов (хотя и не по-настоящему частным).
Это то, что здесь намерение? Есть ли какие-либо изменения, чтобы сделать вещи на самом деле частным сейчас? Я тоже замечаю директиву @private.
Какой твой человек кодирующий стиль в отношении частных варс и методов?
Обновление: поскольку Xcode натягивает нас для использования расширений класса, я пошел вперед и использовал их для частных методов / Ивара для этого проекта. Я нашел недостаток, хотя. Я видел, что я мог повторно использовать один из моих подклассов UiviewwiewControllers вместе со всеми его Uibuttons, UILabels и т. Д. .... У меня было это наследство: UiviewController <- FirstViewController <- SecondViewController.
Ну, все частные методы, которые я положил в расширение класса FirstViewController, не всплывают в автозаполнении, когда я код в ShickViewController. Небольшое раздражение ....
Решение
Вы ссылаетесь на это определение интерфейса:
@interface MYViewController ()
@end
.
Это технически уклон в классе, а не категории. Категории имеют строку внутри скобок. Усиливания классов добавляются в класс во время компиляции, а также могут добавлять ивар (обычно в виде свойств). Категории добавляются во время выполнения и не могут добавить ивар.
Все, что сказано, ваша точка зрения правильная. Это используется для определения частных методов и свойств.
в мире Objc, «Private» - это знак «без преграчий», а не стена из бритвы. Хотя есть ключевое слово @private
(добавляет правоприменение компилятора), оно относится только к Иварам, и, как правило, не нужно. Этот тип конфиденциальности на основе предупреждения очень хорошо работает в OBJC и вполне достаточно.
Поместите свои частные свойства в данном расширении класса, а за пределами звонящих получится «может не отвечать на селектор« Предупреждения, если они пытаются получить доступ к ним (так же, как они получат для вызова любого неопределенного метода). Вы никогда не должны разрешить предупреждения существовать в проекте OBJC, поэтому это обеспечивает инкапсуляцию данных.
Редактировать
Если они частные, тогда они не должны всплывать в вашем подклассе. То, что вы хотите защищено. Там нет большой схемы для защищенных методов в OBJC, но общая техника заключается в том, чтобы поместить их в категорию в файле .h, такой как MyViewController + Protected.h. Я нахожу это очень редко на практике, так как столько хорошего дизайна OBJC не подкласса. Вместо этого он использует состав и делегирование.
относительно "почему просто просматривать контроллеры". Во-первых, это не просто просматривать контроллеры. Это просто контроллеры на iOS (ну, VC, TableViewController и GlkviewController). На Mac, это также контроллеры окон и импортеров прожекторов. Посмотрите:
.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates
.
Но почему те? Ну, это все контроллеры, и безумно распространено для контроллеров необходимости частных свойств. На самом деле, если у вас нет частных свойств в контроллере, вы, вероятно, делаете слишком много общественности. Это не как универсальная модель и просмотр классов. Я подозреваю, что играет в их решении. Это может быть также разные люди, которые владели шаблонами, или что они были обновлены в разное время. Иногда вы видите небольшие несоответствия, которые разглаживаются со временем.
Вы также можете сделать свои собственные шаблоны. Смотрите Создание пользовательских шаблонов файлов xcode 4 .