XCode теперь генерирует пустую категорию.Почему?

StackOverflow https://stackoverflow.com//questions/11679885

  •  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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top