関数ポインタと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引数:NSIntegertypedef 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
?スA?スv?ス?ス?スフ抵ソス?ス??
?スu?ス?ス?スb?スN?ス`?スF?ス[?ス?ス?ス^?ステ搾ソス?スZ?スp
?スV?ス?ス?ス?ス?スミ会ソス
?スT?スE?ス?ス謨ァ?ス?ス
?ス?ス?ス{?スフなりた?ス?ス