-1

在 Cocoa Programming for Mac OS X (Hillegass) 中,第 19 章中有一个类:

@interface BigLetterView : NSView {
NSColor *bgColor;
}
@property (strong) NSColor *bgColor;
@end

访问器定义如下:

- (void)setBgColor:(NSColor *)c {
bgColor = c;
[self setNeedsDisplay:YES]; }

这对我来说看起来是正确的,但它会创建一个无限循环:bgColor = c调用setBgColor:c

这段代码正确吗?

如何重新定义二传手?我需要什么来编译这段代码?

4

2 回答 2

0

在现代 Xcode/llvm 中,您可以稍微清理一下您的代码。

也就是说,您不需要将成员变量声明为支持变量,也不需要声明合成语句。

如果你不 declase 合成你自己,一个属性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
于 2012-11-25T21:51:08.427 回答
0

这样做看起来更干净,更容易理解。

@interface BigLetterView : NSView
@property (strong) NSColor *bgColor;
@end
@implementation BigLetterView

- (void)setBgColor:(NSColor *)c {
_bgColor = c;
[self setNeedsDisplay:YES]; 
}

此外,制定一个简单的规则,在您使用它的任何其他地方始终使用带有 self 的属性。这只是一个更好的规则,可以让你清楚地理解事物。

于 2012-11-25T21:37:31.620 回答