それでおしまい。そのようなメソッドを (少なくともパブリック API として) 必要とするのはなぜでしょうか? 実用的な用途はありますか?
3 に答える
このself
メソッドは、Key-Valueコーディング(KVC)に役立ちます。
KVCを使用すると、オブジェクトを辞書のように扱うことができます。次のように、プロパティの名前を含む文字列を使用して、オブジェクトのプロパティにアクセスできます[view valueForKey:@"superview"]
。次のように、キーパスを含む文字列を使用してプロパティのチェーンをたどります[view valueForKeyPath:@"superview.superview.center"]
。
NSObject
にはメソッドがあるため、キーまたはキーパスとしてself
使用できます。したがって、プログラムでキーパスを作成する場合、またはファイルからキーパスを読み取る場合は、キーとして使用すると、特殊なケースを記述しないようにすることができます。self
[view valueForKey:@"self"]
"self"
self
次のように、述語で使用することもできます。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith \"foo\""];
NSArray *filteredArray = [arrayOfStrings filteredArrayWithPredicate:predicate];
この場合、実際に(おそらくKVCを介して)メソッドNSPredicate
を使用するかどうかはわかりません。self
それは確かに可能です。
なぜ「自己」が最初に追加されたのかはわかりませんが、オブジェクトへの内部ポインタを保護するのに役立ちました。Appleの公式の推奨事項は、内部ポインタを使い終わった後に[fooself]呼び出しを挿入することでした。メソッド呼び出しは機能的には何もしませんが、コンパイラーがそれまでfooを維持することを保証します。
ObjC ランタイムに関係していると思います。
objc_msgSend(autoreleasePool, sel_registerName("drain"));
BOOL AppDel_didFinishLaunching(struct AppDel *self, SEL _cmd, void *application, void *options)
最初の引数は自分自身です。それと何か関係があると思います。正直なところ、最終的には次のようになります。
id self(struct id *self, SEL _cmd) {
return self;
}
....この回答を書き始める前に、もっと意味がありました。