我看到了这个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
答案 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;
会自动生成。