2015-01-02 3 views
3

Я пытаюсь добавить новый файл в свой проект Xcode с помощью Xcode 6.1.1, а Xcode теперь имеет опцию «Тип файла», в которой вы выбираете «Empty File, Category» , Protocol, Extension "Xcode добавление объектно-c-файла «тип файла»

Может кто-нибудь объяснить различия между ними и то, что будет выбрано по умолчанию? Мой файл является подклассом NSObject.

Благодаря

+3

Вы хотите CocoaClass, а не Objective-C файл. (убедитесь, что вы выбрали Objective-C в поле языка при создании) – Logan

+0

Ах, я неправильно понял, что вы ищете. Рад, что ты это нашел. – Logan

+0

Спасибо Logan - ваш ответ решил мою непосредственную проблему добавления нового нового класса. И поиск определения этих вариантов также помог мне в собственном образовании. С новым годом – codertoj

ответ

2

Категория

Категории используются, чтобы помочь модуляризует и организовывать определение классов. Они позволяют вам принять (сложное) определение класса и распространить его на несколько организованных классов. Это не то же самое, что и подклассы. Хотя категории позволяют вам переопределять методы, Objective-C не имеет способа определить, какое определение метода должно использоваться, поэтому вы никогда не должны использовать категорию для переопределения методов. Вместо этого создайте подкласс, который переопределяет метод в соответствии с обычным.

Категории могут содержать защищенные методы, которые «позволяют произвольным файлам« входить »в часть API, просто импортируя категорию». (Проверьте ниже статей.)

Расширение

Расширения обеспечивают аналогичные функциональные возможности категорий, за исключением того, что вы должны реализовать API внутреннего абонента в главном файле реализации.

Расширения также могут использоваться для создания формального частного API. Обычно, если вы хотите создавать частные методы, вы должны записать их в блок реализации, но исключить их из блока интерфейса. Однако, если у вас есть обширная группа методов, которые вы хотели бы оставаться конфиденциальными, это становится громоздким и трудным для чтения/поддержания. Используя расширения, вы можете определить частные методы как в интерфейсе, так и в блоках реализации .m-файла. До тех пор, пока вы не включите его в соответствующий файл .h, эти методы будут рассматриваться как частные методы.

Расширения также могут использоваться для того, чтобы ранее объявленные свойства были доступны только для чтения вне класса чтения-записи внутри класса (используя синтаксис «self.»).

Протокола

протоколы позволяют отведенные горизонтальные отношения через различные (иногда не связанные между собой) классы и иерархии классов. Протокол состоит из API, который может использоваться различными классами, независимо от того, связаны они или нет. Это позволяет вам модифицировать/добавлять некоторые функциональные возможности класса с помощью потенциально широкого круга классов без необходимости подклассифицировать их и изменить собственные иерархии классов.

Для того, чтобы использовать протокол, класс нужно только: 1. Включите имя протокольным внутри угловых скобок <> после класса/суперкласс декларации 2. Реализовать методы Протокола

Протоколы могут также могут быть полезны для проверки типов.

Пустой файл

пустой файл - это всего лишь пустой файл. Вы даете ему имя, но оно не содержит никакой информации о классе (без генерируемых методов, блоков, комментариев и т. Д.).

Источники: RyPress article on Categories and Extensions и RyPress article on Protocols. В обеих статьях есть полезные примеры каждого инструмента.

Смежные вопросы