具有自定义getter的readonly属性是否会合成一个实例变量?

时间:2014-03-06 05:17:18

标签: objective-c properties

我有一种情况,我不希望为一组属性合成实例变量(我通过用户默认值和钥匙串管理它们)。

如果我有以下内容,_loginUsername肯定会合成:

@property (nonatomic, readonly) NSString *loginUsername;

我知道如果我有以下内容,实例变量将无法合成,因为声明是“我将自己照顾它”:

@property (nonatomic, getter = loginUsername, setter = setLoginUsername) NSString *loginUsername;

使用自定义getter的readonly属性的行为是否相同?:

@property (nonatomic, readonly, getter = loginUsername) NSString *loginUsername;

最终的财产声明是否会合成_loginUsername?我很确定不会,但我正在努力更好地掌握属性属性,所以要确保我不会离开。

用于解释在编译时是否已知这一点的加分点(没有作弊和Xcode中的检查!)。

我的实现文件中没有任何@synthesize语句。

1 个答案:

答案 0 :(得分:23)

  

注意:编译器将自动合成实例变量   在所有情况下,它也合成至少一个访问者   方法。如果为读写实现getter和setter   编译器将使用属性或只读属性的getter   假设您正在控制属性实现   并且不会自动合成实例变量。如果你还是   需要一个实例变量,你需要请求一个   合成

Programming with Objective-c - Encapsulating data - 您可以实施自定义访问者方法