トップページ > プログラム > 2016年11月18日 > QxITf25H

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

7 位/218 ID中時間01234567891011121314151617181920212223Total
書き込み数1010000000003000000000005



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

書き込みレス一覧

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は、既存クラスのメソッドを高速に呼び出すために作ったんじゃないですかね。


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