公开阅读,"私人"保留财产

Mor*_*ess 2 objective-c

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

Jer*_*myP 6

在您的公共接口中,声明属性只读ie

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

@end
Run Code Online (Sandbox Code Playgroud)

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

// Foo.m

@interface Foo() // Note parentheses

@property (retain) Baz* bar;

@end

@implementation Foo

@synthesize bar;

@end
Run Code Online (Sandbox Code Playgroud)

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

但是,仅仅声明一个只读属性并直接访问ivar的优点是你不必手动实现KVO,当然,内存管理是自动完成的.