Использование свойств для примитивных типов - PullRequest
17 голосов
/ 08 января 2009

У меня проблемы с пониманием, когда использовать свойства в Objective C 2.0. Кажется, вам не нужно свойство для примитивного типа, такого как: int, bool, float. Это правда? Я видел примеры, показывающие свойства для этих типов и других опускающих их. Например, в примере кода Apple они имеют:

...
@interface Book : NSObject {
    // Primary key in the database.
    NSInteger primaryKey;
    // Attributes.
    NSString *title;
    NSDate *copyright;
    NSString *author;

    BOOL hydrated;
    BOOL dirty;
    NSData *data;
}

@property (assign, nonatomic, readonly) NSInteger primaryKey;
// The remaining attributes are copied rather than retained because they are value objects.
@property (copy, nonatomic) NSString *title;
@property (copy, nonatomic) NSDate *copyright;
@property (copy, nonatomic) NSString *author;
...

Пример кода в списке книг Apple SQLite

Итак, как вы можете видеть, они не используют свойство для BOOL, но рассматривают его как переменную экземпляра в файле реализации, считывая значение и устанавливая значение. При поиске в Интернете я нашел учебники, в которых используются такие свойства, как: (флаг @property BOOL). Может кто-нибудь пролить свет на эту тему для меня? Спасибо.

1 Ответ

34 голосов
/ 08 января 2009

Да, вы должны объявить свойство для примитивных типов. Единственная реальная разница в том, что вы должны использовать метод assign (который используется по умолчанию, поэтому вы также можете его оставить) вместо копирования или сохранения. Я не могу говорить для остальной части примера, но он, вероятно, обращается к внутренней переменной экземпляра напрямую, или если к ней обращаются из другого значения ключа класса, кодирование генерирует средство доступа (что на самом деле плохая форма). Я предполагаю, что это первое; если мне не нужен специальный метод доступа и переменная экземпляра не используется вне класса, я просто ссылаюсь на нее напрямую, а не объявляю свойство. Я полагаю, что некоторые могут возразить против этого, но мне это кажется немного чрезмерным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...