您无法获取函数(或方法)返回的内容的地址。您需要直接获取color
ivar 的地址(即&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 的属性指南。