这些方法在一个名为 Rectangle 的类中,这是实现文件 Rectangle.m 的一部分
#import "XYPoint.h"
- (void)setOrigin:(XYPoint *)pt {
origin = pt;
}
- (XYPoint *)origin {
return origin;
}
这些方法在一个名为 Rectangle 的类中,这是实现文件 Rectangle.m 的一部分
#import "XYPoint.h"
- (void)setOrigin:(XYPoint *)pt {
origin = pt;
}
- (XYPoint *)origin {
return origin;
}
对 Objective-C 来说并没有什么特别之处。它只是一个名为 的属性的 setter 和 getter origin
。
当您使用任一设置新原点时
self.origin = /*some new value*/;
或者
[self setOrigin: /*some new value*/];
第一个方法将被调用。
以同样的方式,当您使用self.origin
or获取值时调用另一个方法[self origin]
(但对于第二种方法)
您通常称这些方法为“setter 和 getter”或简称为“accessors”。在其他语言中,如 Java,通常命名这些方法setXyz
,getXyz
但 Objective-C 将它们命名setXyz
为xyz
getter。
如今,您很少需要自己编写这些方法。通过使用 aproperty
并让编译器为您生成此样板代码,您可以获得相同的好处。您示例中的属性看起来像这样并替换所有代码:
@property (weak) XYPoint *origin; // weak since your methods are not retaining the new value
您可以在此答案中了解使用属性与实例变量的原因。简而言之:拥有一个包装变量的方法使您能够对对象进行内存管理(如复制或保留),并可以调用其他启用 KVC/KVO 的方法,但它有一点开销。