DX・デジタルトランスフォーメーション

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

ブロックチェーン・暗号技術 | android | iOS | Web | アプリの著作権 | 日本のなりたち | 禅・大乗仏教 | 新しい社会

関数ポインタと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月
     12
3456789
10111213141516
17181920212223
24252627282930
31      
android
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
デジタルトランスフォーメーションで新しい生活を提案!