トップページ > プログラム > 2016年11月17日 > +o4tuiiL

書き込み順位&時間帯一覧

12 位/206 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000120000000014



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net

書き込みレス一覧

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を渡して調べてもらう必要が有るんですよ。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。