Именование свойств и типов данных
В этом разделе описываются соглашения о присвоении имен для заявленных свойств, переменных экземпляра, констант, уведомлений и исключений.
Заявленные свойства и переменные экземпляра
Заявленное свойство эффективно объявляет методы доступа для свойства, и таким образом, соглашения для именования заявленного свойства являются широко тем же как теми для именования методов доступа (см. Методы доступа). Если свойство выражено как существительное или глагол, формат:
@property (…)
введите nounOrVerb;
Например:
@property (strong) NSString *title; |
@property (assign) BOOL showsAlpha; |
Если имя заявленного свойства выражено как прилагательное, однако, имя свойства опускает «,» префикс, но указывает стандартное имя для получить средства доступа, например:
@property (assign, getter=isEditable) BOOL editable; |
Во многих случаях при использовании заявленного свойства, Вы также синтезируете соответствующую переменную экземпляра.
Удостоверьтесь, что имя переменной экземпляра кратко описывает сохраненный атрибут. Обычно, Вы не должны получать доступ к переменным экземпляра непосредственно; вместо этого необходимо использовать методы доступа (Вы действительно получаете доступ к переменным экземпляра непосредственно в init
и dealloc
методы). Чтобы помочь сигнализировать это, снабдите префиксом имена переменной экземпляра подчеркивание (_
), например:
@implementation MyClass { |
BOOL _showsTitle; |
} |
При синтезировании переменной экземпляра с помощью заявленного свойства укажите имя переменной экземпляра в @synthesize
оператор.
@implementation MyClass |
@synthesize showsTitle=_showsTitle; |
Существует несколько соображений для учета при добавлении переменных экземпляра к классу:
Избегите явно объявлять общедоступные переменные экземпляра.
Разработчики должны интересоваться интерфейсом объекта, не подробными данными того, как он хранит свои данные. Можно избежать объявлять переменные экземпляра явно при помощи заявленных свойств и синтезировать соответствующую переменную экземпляра.
Если необходимо объявить переменную экземпляра, явно объявите его с также
@private
или@protected
.Если Вы ожидаете, что Ваш класс будет разделен на подклассы, и что эти подклассы потребуют прямого доступа к данным, используйте
@protected
директива.Если переменная экземпляра должна быть доступным атрибутом экземпляров класса, удостоверьтесь, что Вы пишете методы доступа для него (если это возможно, используйте объявленные свойства).
Константы
Правила для констант варьируются согласно тому, как создается константа.
Перечислимые константы
Используйте перечисления для групп связанных констант, имеющих целочисленные значения.
Перечислимые константы и определение типа, при котором они сгруппированы, следуют соглашениям о присвоении имен для функций (см. Функции Именования). Следующий пример прибывает из
NSMatrix.h
:typedef enum _NSMatrixMode {
NSRadioModeMatrix = 0,
NSHighlightModeMatrix = 1,
NSListModeMatrix = 2,
NSTrackModeMatrix = 3
} NSMatrixMode;
Обратите внимание на то, что
typedef
тег (_NSMatrixMode
в вышеупомянутом примере), является ненужным.Можно создать перечисления без имени для вещей как битовые маски, например:
enum {
NSBorderlessWindowMask = 0,
NSTitledWindowMask = 1 << 0,
NSClosableWindowMask = 1 << 1,
NSMiniaturizableWindowMask = 1 << 2,
NSResizableWindowMask = 1 << 3
};
Константы создаются с константой
Использовать
const
создать константы для значений с плавающей точкой. Можно использоватьconst
создать целочисленную константу, если константа не связана с другими константами; иначе, используйте перечисление.Формат для
const
константы иллюстрируются следующим объявлением:const float NSLightGray;
Как с перечислимыми константами, соглашения о присвоении имен совпадают с для функций (см. Функции Именования).
Другие типы констант
В целом не используйте
#define
команда препроцессора для создания констант. Для целочисленных констант используйте перечисления, и для констант с плавающей точкой используютconst
спецификатор, как описано выше.Используйте прописные буквы для символов, которые препроцессор оценивает в определении, будет ли обработан блок кода. Например:
#ifdef DEBUG
Обратите внимание на то, что макросы, определенные компилятором, имеют ведущие и запаздывающие символы двойного подчеркивания. Например:
__MACH__
Определите константы для строк, используемых в таких целях как имена уведомления и ключи словаря. При помощи строковых констант Вы гарантируете, что компилятор проверяет, что собственное значение указано (т.е. это выполняет проверку правописания). Какао платформы обеспечивают много примеров строковых констант, таких как:
APPKIT_EXTERN NSString *NSPrintCopies;
Фактическое значение NSString присваивается константе в файле реализации. (Обратите внимание на то, что
APPKIT_EXTERN
макрос оценивает кextern
для Objective C.)
Уведомления и исключения
Имена для уведомлений и исключений соблюдают подобные правила. Но у обоих есть их собственные рекомендуемые образцы использования.
Уведомления
Если класс будет иметь делегата, то большинство его уведомлений будет, вероятно, получено делегатом через определенный метод делегата. Имена этих уведомлений должны отразить соответствующий метод делегата. Например, делегат глобальной переменной NSApplication
объект автоматически регистрируется для получения applicationDidBecomeActive:
обменивайтесь сообщениями каждый раз, когда приложение отправляет NSApplicationDidBecomeActiveNotification
.
Уведомления идентифицируются глобальной переменной NSString
объекты, имена которых составлены таким образом:
[Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification |
Например:
NSApplicationDidBecomeActiveNotification |
NSWindowDidMiniaturizeNotification |
NSTextViewDidChangeSelectionNotification |
NSColorPanelColorDidChangeNotification |
Исключения
Несмотря на то, что Вы свободны использовать исключения (т.е. механизмы, предлагаемые NSException
класс и связанные функции) в любой цели, которую Вы выбираете, Какао, резервирует исключения для программных ошибок такой выходящий за пределы индекс массива. Какао не использует исключения для обработки регулярных условий ожидаемой погрешности. Для этих случаев используйте возвращенные значения такой как nil
, NULL
, NO
, или коды ошибки. Для получения дополнительной информации см. Руководство по программированию Обработки ошибок.
Исключения идентифицируются глобальной переменной NSString
объекты, имена которых составлены таким образом:
[Prefix] + [UniquePartOfName] + Exception |
Уникальная часть имени должна выполнить составляющие слова вместе и капитализировать первую букву каждого слова. Вот некоторые примеры:
NSColorListIOException |
NSColorListNotEditableException |
NSDraggingException |
NSFontUnavailableException |
NSIllegalSelectorException |