创建一个只读公开的属性和读/写“私有”的最佳方法是什么?我可以创建一个readonly方法并在.m文件中的无名扩展名中声明该属性,但最好我保留点符号。
答案 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将无法通过点符号访问。您必须直接通过其名称访问它。