使用不受实例变量支持的属性
Usage of properties not backed by instance variables
Class.h:
@property (strong, nonatomic) UIFont *font;
Class.m:
@interface Class()
@property (strong, nonatomic) UILabel *titleLabel;
@end
- (void)setFont:(UIFont *)font
{
self.titleLabel.font = font;
}
- (UIFont *)font
{
return self.titleLabel.font;
}
在此示例中,Class.h
中声明的 font
属性 没有支持实例变量,因为两个访问器都被覆盖了,而是被用作 "proxy" 到 titleLabel.font
上,否则无法从 class 外部访问,因为它不在 public 接口中。
这是覆盖访问器的合法用法,还是这种方法有缺陷?做 属性 属性,例如strong
、weak
这里有什么区别吗?
你在这里做的非常好。属性不必由 ivar 支持。
我已经编写了属性,其中 setter 和 getter 只是 write/read 值 to/from NSUserDefaults
.
至于这样的属性应该是strong
还是weak
等等,你应该根据你想提供给客户的"contract"的 属性。在您发布的情况下,您应该使您的 属性 与您正在代理的 属性 相同(您正在为 font
做)。
Class.h:
@property (strong, nonatomic) UIFont *font;
Class.m:
@interface Class()
@property (strong, nonatomic) UILabel *titleLabel;
@end
- (void)setFont:(UIFont *)font
{
self.titleLabel.font = font;
}
- (UIFont *)font
{
return self.titleLabel.font;
}
在此示例中,Class.h
中声明的 font
属性 没有支持实例变量,因为两个访问器都被覆盖了,而是被用作 "proxy" 到 titleLabel.font
上,否则无法从 class 外部访问,因为它不在 public 接口中。
这是覆盖访问器的合法用法,还是这种方法有缺陷?做 属性 属性,例如strong
、weak
这里有什么区别吗?
你在这里做的非常好。属性不必由 ivar 支持。
我已经编写了属性,其中 setter 和 getter 只是 write/read 值 to/from NSUserDefaults
.
至于这样的属性应该是strong
还是weak
等等,你应该根据你想提供给客户的"contract"的 属性。在您发布的情况下,您应该使您的 属性 与您正在代理的 属性 相同(您正在为 font
做)。