Подтвердить что ты не робот

Использование свойств для примитивных типов

У меня возникли проблемы с пониманием того, когда следует использовать свойства 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). Может кто-то пролить свет на эту тему для меня? Спасибо.

4b9b3361

Ответ 1

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