公开阅读,“私人”保留财产

时间:2011-04-26 09:33:23

标签: objective-c

创建一个只读公开的属性和读/写“私有”的最佳方法是什么?我可以创建一个readonly方法并在.m文件中的无名扩展名中声明该属性,但最好我保留点符号。

2 个答案:

答案 0 :(得分:6)

在您的公共界面中,声明该属性为只读,即

// Foo.h
@interface Foo
{
@private
    Baz* bar;
}
@property (readonly, retain) Baz* bar;

@end

在您的实现中,您可以声明class extension,然后重新声明属性读/写:

// Foo.m

@interface Foo() // Note parentheses

@property (retain) Baz* bar;

@end

@implementation Foo

@synthesize bar;

@end

上述意味着将创建setter和getter,但在包含标题的文件中,只有getter才会知道。缺点是setter确实存在,所以如果你忽略编译器警告并使用Foo.m之外的setter它仍然可以工作。

然而,仅仅声明只读属性并直接访问ivar的优势在于您不必手动实现KVO,当然,内存管理也是自动完成的。

答案 1 :(得分:2)

通常人们创建一个实例var并将其与@synthesize语句中的readonly属性配对。但是,ivar将无法通过点符号访问。您必须直接通过其名称访问它。