这是我经常遇到的一种情况,足以使样板代码浪费,而且我确信我不能是唯一的。这是单调的,有没有更好的方法,还是我每次都必须这样做?
@interface SomeUIElement : UIView
@property CGFloat insetMargin; // <-- just an example of a UI parameter
@end
@implementation SomeElement
- (void)setInsetMargin:(CGFloat)insetMargin {
_insetMargin = insetMargin;
[self setNeedsDisplay]; // <-- the only thing that stops it being synthesized
}
@end
现在这引发了一个编译警告,我没有吸气剂,我可以添加
- (CGFloat)insetMargin {
return _insetMargin;
}
但是现在,它抱怨我没有 ivar(因为定义的 getter 和 setter 意味着没有为我创建一个),所以我需要添加
@interface SomeUIElement () {
CGFloat _insetMargin;
}
这意味着我们只是想在属性更改时强制显示更新,因此开销很大。
是否有(a)某种方式告诉 ObjC 我确实打算为我创建 getter 和 ivar,所以我只需要编写 setter,或者(b)当属性相关时请求显示更新的更好方法视觉外观变化?
Apple 的 SDK 是如何做到这一点的(我假设我没有错过某种查看方式,比如 UILabel 来源)?