在Mac OS X(Hillegass)的Cocoa Programming中,第19章有一个类:
@interface BigLetterView : NSView {
NSColor *bgColor;
}
@property (strong) NSColor *bgColor;
@end
访问者的定义如下:
- (void)setBgColor:(NSColor *)c {
bgColor = c;
[self setNeedsDisplay:YES]; }
这对我来说是正确的,但它会创建一个无限循环:bgColor = c
调用setBgColor:c
这段代码是否正确?
如何重新定义二传手?编译此代码需要什么?
答案 0 :(得分:0)
这样做,看起来更干净,更容易理解。
@interface BigLetterView : NSView
@property (strong) NSColor *bgColor;
@end
@implementation BigLetterView
- (void)setBgColor:(NSColor *)c {
_bgColor = c;
[self setNeedsDisplay:YES];
}
另外,制定一个简单的规则,以便在您使用它的任何其他地方始终使用self属性。这是让你清楚地理解事物的更好规则。
答案 1 :(得分:0)
在现代Xcode / llvm中,您可以稍微清理一下代码。
即,您既不需要将成员变量声明为支持变量,也不需要声明合成语句。
如果你没有宣布合成你的自我,那么属性foo
将具有支持变量_foo
所以这段代码应该可行
@interface BigLetterView : NSView
@property (nonatomic, strong) NSColor *bgColor;
@end
@implementation BigLetterView
@synthesize bgColor = _bgColor;
- (void)setBgColor:(NSColor *)c
{
_bgColor = c;
[self setNeedsDisplay:YES];
}
@end