- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
562 :デフォルトの名無しさん[sage]:2016/11/17(木) 13:40:44.67 ID:+o4tuiiL - >>561
1.instanceMethodForSelectorでメソッドの実体である関数のポインタを取得(IMP func) 2.funcをキャストして呼び出し 2のときに、メソッドの暗黙の第1,第2引数である id obj, SEL selectorを渡してます。
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
565 :デフォルトの名無しさん[sage]:2016/11/17(木) 14:05:35.87 ID:+o4tuiiL - ランタイムは、渡されたセレクタをメソッドリストから検索して、有れば実行、無ければエラー。
ってことかな。
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
566 :デフォルトの名無しさん[sage]:2016/11/17(木) 14:28:15.44 ID:+o4tuiiL - IMP使った場合はランタイムは経由しないでダイレクトに関数コールするけど、
通常は動的にメソッド呼び出しをするのでそういう仕様になってる。 のではないだろうか。
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
569 :デフォルトの名無しさん[sage]:2016/11/17(木) 23:13:49.69 ID:+o4tuiiL - だいたいその辺の、実行時解決を実現したかったという理由だと思うけど、
ランタイムがメソッド呼び出しするときの動作は 1.レシーバがnilかどうか 2.レシーバのメソッドリストに該当メソッドがあるか 3.なければスーパークラスにあるか 4.なければthrow exception だよね。 だからメソッド呼ぶときはランタイムにレシーバとselectorを渡して調べてもらう必要が有るんですよ。
|