Именование свойств и типов данных

В этом разделе описываются соглашения о присвоении имен для заявленных свойств, переменных экземпляра, констант, уведомлений и исключений.

Заявленные свойства и переменные экземпляра

Заявленное свойство эффективно объявляет методы доступа для свойства, и таким образом, соглашения для именования заявленного свойства являются широко тем же как теми для именования методов доступа (см. Методы доступа). Если свойство выражено как существительное или глагол, формат:

@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;

Существует несколько соображений для учета при добавлении переменных экземпляра к классу:

Константы

Правила для констант варьируются согласно тому, как создается константа.

Перечислимые константы

  • Используйте перечисления для групп связанных констант, имеющих целочисленные значения.

  • Перечислимые константы и определение типа, при котором они сгруппированы, следуют соглашениям о присвоении имен для функций (см. Функции Именования). Следующий пример прибывает из 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