Objective-Cのブロック(Block)が苦手だけど少し覚えた過程


世間様はiPhone5でにぎわってますねー。
まだまだ勉強中の身なんですが、Objective-Cのブロック(Block)についてテクニック的な話ではなく、
自分がブロックを学ぶときどうしたか?というプロセスってほど大げさでもない手順を書きます。
[参考]
Apple公式ブロックプログラミングトピック
https://developer.apple.com/jp/devcenter/ios/library/documentation/Blocks.pdf

Objective-Cの基礎(Blocks)
http://eikatou.net/blog/2012/07/objective-c_kiso_blocks/



ブロックって書き方がなんか苦手で、敬遠してました。
僕と同じで読み辛いなぁと思ってる人は結構いると思ってます。
そんな中、なぜブロックを改めてやるかというと、


公式がデリゲートよりブロックでしょという流れになっている


僕の中でこれが一番大きいです。ちょっと使いたいサンプルをみてもブロックだし、
iOS5位から今までデリゲートだった所もブロックに変わっちゃったし、、
大体ブロックがかんできて、読めないとそこで飛ばしちゃってたことが多かったです。
デリゲートに頼りすぎてました、、このままでは置いていかれると


逆に基本さえ押さえれば、幅が広がるなぁと思います。
なので、僕がブロックを学んだ時に(まだ終わってないけど)意識した事を書きます。


まだちゃんと理解しきっていないので、あれなんですけど、
人の勉強の仕方って結構僕は参考になるので書きます。
意識したのは以下2つです。


1. 基本形と触れ合う時間を大切にする。
2. 詰め込みすぎない。


まず1.について、
Apple公式からまんま持ってくると、サンプルのブロックって構文はこんなのです。
「 int (^myBlock)(int) = ^(int num) { return num * multiplier; }; 」
まずはこれを覚えないと始まらなかったです。
※そのまま公式PDFや玄人が使うブロックの記事を見て頭がかなり混乱しました。


まずはiPhoneのメモでちょこっとかけるようにユーザー辞書にいくつか単語を登録しました。
(@sazameki氏のtweetからいいなとおもって)
「はっと」を「^」
「せみ」を「;」
「あすた」を「*」
まずは左半分の宣言int (^myBlock)(int) から慣れようと思い普通の変数との違いを考えました。
普通の変数は以下のように宣言しますが、

int num;
型 変数名



ブロックはこうなります。

int (^myBlock)(int);
戻り値型(^ブロック名)(引数型)

変数宣言に引数がついただけ
位にとらえると分かりやすかったです。
これだけなら短いので隙間時間に1回書いたり、少し思い出したりして覚えられると思います。
これがすらすら書ければ、ブロック名の省略や可変引数とか無名ブロックとかも、
あーAがないだけねー、Bがないだけねーとかで差分で覚えられます。


2.の詰め込み過ぎないについては、
Appleの公式ドキュメントをずっとみてると、言い回しが難しくて試さないとテンパってきます。
なので、情報を小分けにして1つ1つ動作を確認して学びましたという事です。
実際- (void)presentViewController:.....なんかを使ってみたり、
「Command」+ 「クリック」で定義に飛んだりしながら、
フレームワークメソッドの引数に確かになってるなぁって
自分が思い出せる範囲で1言2言ずつゆっくりポイントを覚えるようにしました。


自分の感じたメリットはやはりドキュメント通りで、
・メソッドの引数に使えるので、そこでしかしない処理がカプセル化できるよー
・コールバックでメソッド増えないし無駄にオブジェクトも増えないよー
・アニメーション→完了時に通知みたいなのを同じ文脈で書けるので可読性あがる(当たり前に読み書きできれば)
という感じです。


とりあえず慣れるとかなり書きやすいのは確かです。
メモリ管理とか懸念はつきないですけど、