関数ポインタとObjective-Cブロックス
C言語にはPHPなどと同じように、ある関数のアドレスをポインタ変数に格納することができる仕組みがある。
C言語の派生語である Objective-C でも同様に関数ポインタを使うことができる。
・通常のポインタ変数
int *pointerVariable;
・関数ポインタ
int (*functionName)(void);
返り値:int
関数名:functionName
引数:void
通常は typedef で定義して用いる
typedef int (*functionName)(void);
functionName functionPointerVariable;
・ブロックス (objectivec blocks)
Objective-Cのブロックスも関数ポインタのようなものと考えて良い。
void (^blocksName)(NSInteger);
返り値:void
関数名:blocksName
引数:NSInteger
typedef void (^BLOCKS_NAME)(void);
BLOCKS_NAME blocksVariable = ^{
};
関数ポインタ(ブロックスポインタ)はメソッドの引数で用いられることが多い。
- (void)methodName:(void (^)(NSDictionary *))bloksPointerVariable {
}
・関数ポインタを返す関数へのポインタ
複雑な書式なのはコンパイラが通常の形式だと認識できないためにこういう特殊な書式になっている。
int (*functionName(int))(void);
返り値(関数ポインタ):int (*)(void)
関数名:functionName
引数:int
分かりづらいので、通常は typedef を使ったこちらの書式で記述することが多い。
typedef int (*FUNCTION_NAME)(void);
FUNCTION_NAME (* functionName)(int);
2023年12月 | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
  |   |   |   |   | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |   |   |   |   |   |   |
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち