您无法获取函数(或方法)返回的内容的地址。您需要直接获取colorivar 的地址(即&color)。不过,在您的情况下,我建议使用您自己提出的方法(id tempCol = self.color; [NSValue value:&tempCol];)。
请注意,使用点表示法时会调用方法。
self.color
// is equal to
[self color]
&([self color])也是不可能的,因为&在编译时解决,而不是在运行时解决。[self color]and的返回值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 的属性指南。