これらのメソッドは 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 にとって特別なことではありません。というプロパティのセッターとゲッターにすぎませんorigin
。
いずれかを使用して新しい原点を設定すると、
self.origin = /*some new value*/;
また
[self setOrigin: /*some new value*/];
最初のメソッドが呼び出されます。
self.origin
同様に、またはのいずれかを使用して値を取得すると、もう一方のメソッドが呼び出されます[self origin]
(ただし、2 番目のメソッドの場合)。
通常、これらのメソッドを「セッターとゲッター」または単に「アクセサー」と呼びます。Java などの他の言語では、これらのメソッドに名前を付けるのが一般的ですsetXyz
がgetXyz
、Objective-C はそれらsetXyz
とxyz
ゲッターに名前を付けます。
最近では、これらのメソッドを自分で作成する必要はほとんどありません。property
を使用し、コンパイラにこのボイラープレート コードを生成させることで、同じ利点が得られます。あなたの例のプロパティは次のようになり、すべてのコードが置き換えられます。
@property (weak) XYPoint *origin; // weak since your methods are not retaining the new value
この回答で、プロパティとインスタンス変数を使用する理由について読むことができます。つまり、変数をラップするメソッドを使用すると、オブジェクトのメモリ管理 (コピーや保持など) が可能になり、KVC/KVO を有効にする他のメソッドを呼び出すことができますが、わずかなオーバーヘッドが発生します。