-4

これらのメソッドは Rectangle というクラス内にあり、これは実装ファイル Rectangle.m の一部です。

#import "XYPoint.h"

- (void)setOrigin:(XYPoint *)pt {
    origin = pt;
}

- (XYPoint *)origin {
    return origin;
}
4

1 に答える 1

3

それについては、Objective-C にとって特別なことではありません。というプロパティのセッターとゲッターにすぎませんorigin

いずれかを使用して新しい原点を設定すると、

self.origin = /*some new value*/;

また

[self setOrigin: /*some new value*/];

最初のメソッドが呼び出されます。

self.origin同様に、またはのいずれかを使用して値を取得すると、もう一方のメソッドが呼び出されます[self origin](ただし、2 番目のメソッドの場合)。


命名規則

通常、これらのメソッドを「セッターとゲッター」または単に「アクセサー」と呼びます。Java などの他の言語では、これらのメソッドに名前を付けるのが一般的ですsetXyzgetXyz、Objective-C はそれらsetXyzxyzゲッターに名前を付けます。

プロパティとインスタンス変数

最近では、これらのメソッドを自分で作成する必要はほとんどありません。propertyを使用し、コンパイラにこのボイラープレート コードを生成させることで、同じ利点が得られます。あなたの例のプロパティは次のようになり、すべてのコードが置き換えられます。

@property (weak) XYPoint *origin; // weak since your methods are not retaining the new value

この回答で、プロパティとインスタンス変数を使用する理由について読むことができます。つまり、変数をラップするメソッドを使用すると、オブジェクトのメモリ管理 (コピーや保持など) が可能になり、KVC/KVO を有効にする他のメソッドを呼び出すことができますが、わずかなオーバーヘッドが発生します。

于 2013-05-26T08:44:53.090 に答える