iOS Blocks

Blocksとは

無名関数みたいなもの

記述方法

^(引数){ /* 処理 */ }
^(void){ /* 処理 */}
^(int arg){ /* 処理 */}

処理を保存している!!


void (^sample)(int) =  ^(int arg){ print "%d", arg; }

処理 print "%d", arg; はdataセクション

int localA = 1;
void (^sample)(int) =  ^(int arg){ print "%d:%d", arg, localA; }

処理 print "%d:%d", arg, localA; はスタックに保存される

copyを使うとヒープ領域に保存される

循環参照させないために

ブロックないではselfを使わない
プライベート変数(ivar)も直接使わない

nilチェックを行うために一旦strong変数に代入する
__blockはARC無効の場合、retainカウントされる

iOS4と5以降では記述の仕方が違う

iOS4では__weakが使えないため__unsafe_unretainedを使う

0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...