创建对公共只读且对“私有”读/写的属性的最佳方法是什么?我可以创建一个只读方法并在 .m 文件中的无名扩展名中声明该属性,但最好我想保留点符号。
在您的公共界面中,声明该属性为只读,即
// Foo.h
@interface Foo
{
@private
Baz* bar;
}
@property (readonly, retain) Baz* bar;
@end
在您的实现中,您可以声明一个类扩展 http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW2,然后重新声明属性读/写:
// Foo.m
@interface Foo() // Note parentheses
@property (retain) Baz* bar;
@end
@implementation Foo
@synthesize bar;
@end
上面的意思是 setter 和 getter 都会被创建,但是在包含 header 的文件中,只有 getter 是已知的。缺点是 setter 确实存在,因此如果您忽略编译器警告并在 Foo.m 之外使用 setter,它仍然可以工作。
然而,与仅声明只读属性并直接访问 ivar 相比,优点是您不必手动实现 KVO,当然,内存管理会自动为您完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)