readonly public,readwrite private property

时间:2013-09-24 11:02:20

标签: ios objective-c properties encapsulation

我看到了这个thread,但在iOS7中并不完全清楚,因为编程指南说你可以省略属性的@synthesise关键字。

我希望@property外部readonly,但内部readwrite。我可以像这样使用@property关键字吗?

编辑:所提供的答案将被认为更正确,或者至少更为惯用。要在类扩展中具有单独的readwrite属性,还是直接在实现中访问ivar?

编辑:显示我正在使用类扩展,如答案中所示。

//.h
@interface CACustomerAuthenticator : NSObject
@property (nonatomic, copy, readonly) NSString *username;
@end

//.m
@interface CACustomerAuthenticator ()
@property (nonatomic, copy, readwrite) NSString *username;
@end

2 个答案:

答案 0 :(得分:8)

如果您想这样做,请在类扩展中重新声明该属性。

例如,如果您有一个名为MyClass的类:

<强> MyClass.h

@property (nonatomic, copy, readonly) NSString *username;

<强> MyClass.m

// Create a class extension before the @implementation section
@interface MyClass ()
@property (nonatomic, copy, readwrite) NSString *username;
@end

现在公共接口的属性为readonly,私有接口将其作为readwrite。并且您不需要@synthesize属性,默认情况下,支持iVar可用作_username

答案 1 :(得分:3)

readonly就足够了。

使用

@synthesize username = _someVar;

您可以在username访问_someVar时写信。如果没有synthesize,那么

@synthesize username = _username;

会自动生成。