代码之家  ›  专栏  ›  技术社区  ›  Sean

对基元类型使用属性

  •  17
  • Sean  · 技术社区  · 16 年前

    我很难理解在目标C 2.0中何时使用属性。对于原语类型(如int、bool、float),似乎不需要属性。这是真的吗?我看到过一些例子,显示了这些类型的属性,其他的则忽略了它们。例如,在苹果的示例代码中,他们有:

    ...
    @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 回复  |  直到 10 年前
        1
  •  34
  •   Marc Charbonneau    16 年前

    是的,您应该为基元类型声明一个属性。唯一的区别是,您应该使用assign(这是默认设置,因此您也可以不使用它)而不是copy或retain。我不能在下面的例子中说,但是它可能是直接访问内部实例变量,或者如果它是从另一个类键值访问的,编码会生成一个访问器(这是非常糟糕的形式)。我猜是前者;如果我不需要一个特殊的访问器,并且实例变量没有在类外部使用,我将直接引用它,而不是声明一个属性。我想有些人可能会反对这一点,但对我来说似乎有点过分了。