您无法获取函数(或方法)返回的内容的地址。您需要直接获取color ivar 的地址(即&color)。不过,就您而言,我建议您使用您自己提出的方法 (id tempCol = self.color; [NSValue value:&tempCol];)。
请注意,使用点表示法时会调用方法。
self.color
// is equal to
[self color]
&([self color]) 也是不可能的,因为& 在编译时解析,而不是在运行时解析。 [self color] 和 self.color 的返回值(它们相等)在编译时还不知道(即使使用 @synthesize,因为您可以在运行时更改 Objective-C 中方法的实现(例如,使用方法混合或使用类别))。
看来您还没有完全理解@synthesize 的作用,所以我来解释一下。 :)
@synthesize 的基本作用是:编译器根据给定的属性名称生成方法及其实现。
例如这个属性:
@property(nonatomic, retain) NSColor *color;
连同这个合成:
@synthesize color;
将在@implementation 中为您插入此代码:
- (NSColor *)color {
return color;
}
- (void)setColor:(NSColor *)newColor {
if (color == newColor) { return; }
NSColor *theOldColor = color;
color = [newColor retain];
[theOldColor release];
}
当您喜欢使用自己的 setter 或 getter 时,只需使用相同的方法名称在 @implementation 中定义它们。例如,如果尚未设置任何颜色,您可以返回默认颜色:
- (NSColor *)color {
if (color) { return color; }
return [NSColor whiteColor];
}
现在编译器将生成 setter,但不会生成 getter:它将使用您提供的 getter,您仍然可以将它与 self.color 一起使用。
您可能想看看Apple's guide on properties。