我有一种情况,我不希望为一组属性合成实例变量(我通过用户默认值和钥匙串管理它们)。
如果我有以下内容,_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
语句。
答案 0 :(得分:23)
注意:编译器将自动合成实例变量 在所有情况下,它也合成至少一个访问者 方法。如果为读写实现getter和setter 编译器将使用属性或只读属性的getter 假设您正在控制属性实现 并且不会自动合成实例变量。如果你还是 需要一个实例变量,你需要请求一个 合成
Programming with Objective-c - Encapsulating data - 您可以实施自定义访问者方法