使用基本类型的属性

时间:2009-01-08 16:38:12

标签: objective-c

我无法理解何时在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 Book List Sample Code

因为你可以看到他们没有为BOOL使用属性,但他们认为它在整个实现文件中有一个实例变量,读取值并设置值。 在线搜索我发现了使用这些类型的属性的教程,例如:(@ property BOOL flag)。有人可以为我阐明这个话题吗?感谢。

1 个答案:

答案 0 :(得分:34)

是的,您应该声明基本类型的属性。唯一真正的区别是您应该使用assign(这是默认值,因此您也可以将其保留),而不是复制或保留。我不能代表示例的其余部分,但它可能直接访问内部实例变量,或者如果从另一个类访问它,则键值编码生成一个访问器(这是非常糟糕的形式)。我猜它是前者;如果我不需要特殊的访问器并且实例变量不在类外使用,我将直接引用它而不是声明属性。有些人可能会反对我的想法,但对我来说似乎有些过分。