- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
571 :デフォルトの名無しさん[sage]:2016/11/18(金) 00:08:47.34 ID:QxITf25H - >>570
セレクタはメソッド呼び出しで必要>>569 IMPで関数呼び出しの場合はランタイムを経由しないので不要 しかしどちらもシグネチャは共通なので(id, SEL, …)ということ
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
572 :デフォルトの名無しさん[sage]:2016/11/18(金) 02:19:58.76 ID:QxITf25H - >>570
ちなみにこれでも動作する。id,SELは渡してない。 void(*f)(void) = [ViewController instanceMethodForSelector:@selector(hoge)]; f(); - (void)hoge { NSLog(@"%@", NSStringFromSelector(_cmd)); } SELを渡してないので null と出力される idも渡してないので、hoge内でselfにアクセスすると落ちる。
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
579 :デフォルトの名無しさん[sage]:2016/11/18(金) 12:39:28.44 ID:QxITf25H - >>578
シグネチャが共通というより、同一の関数なので同じシグネチャなんですよ。 ランタイムが呼ぶメソッドの実体も、IMPを取得してダイレクトに呼ぶ関数も、「同じ関数」です。 その関数の引数が (id, SEL, …) なんですね。
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
580 :デフォルトの名無しさん[sage]:2016/11/18(金) 12:42:31.61 ID:QxITf25H - で、自分はIMPは使いません。
IMPを使うくらいならCの関数を書けばいいだけなので。
|
- Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
581 :デフォルトの名無しさん[sage]:2016/11/18(金) 12:51:34.13 ID:QxITf25H - Objective-Cは、以前はメソッド呼び出しのオーバーヘッドがネックになってたようなので、
IMPのAPIは、既存クラスのメソッドを高速に呼び出すために作ったんじゃないですかね。
|