Objective-CでMethodのIMPを取得して呼び出す場合に、 正しい関数プロトタイプの関数ポインタにキャストする必要がありますが、 typedefなどを使わずにその場で目的の関数ポインタ型にキャスト する方法を紹介します。

   1  SEL selector = @selector(drawRect:);
   2  Method method = class_getInstanceMethod([UISearchBar class], selector);
   3  IMP drawRect = method_getImplementation(method);
   4  ((void(*)(id, SEL, CGRect))drawRect)(self, selector, rect);

こんな感じにすればOkです。

posted by Png genki on Thu 13 Nov 2008 at 01:15

Search Words:

  • キャスト41 関数ポインタ31 ポインタ20 objective-c12 c8 c言語8 8 関数7 ポインタ型6 objective3 関数ポインタ型3 linux3 キャストする2 typedef2 型キャスト2 cast2 高速化2 エラー2 ポインタ型にキャスト2 ポインタへのキャスト1 キャストの方法1 sqlite1 lxg@1 ポインタでキャスト1 lxg@|c^1 関数ポインタへのキャスト1 C言語1 関数のポインタ1 ポインタ型のキャスト1 gdb1 ポインタにキャスト1 C#1 関数のキャスト1 型にポインタ1 関数ポインタへキャスト1 関数の型1 as31 関数型1 1 ポインタ型へのキャスト1 ポインター1 ᥽åɡݥ󥿡1 xml型1 関数型キャスト1 正しい関数ポインタ1 jquery1

Comments:

or Preview
Tags
objective-c memo tips
Social Bookmarks
  • Delicious
  • B_entry1027
  • Clip_16_12_w1027