ブロックチェーン・AI・システム開発の株式会社INDETAIL

iOS blockについて

2014.05.19
なめ橋

こんにちは。
なめ橋です。

先日、友人とドライブしていると、巷で噂(?)のリアルマリオカートに出会いました。
目撃したのはマリオとピーチ姫だけだったのですが、感激しました。
以前、札幌駅でのび太くんのコスプレをしているおじさんを目撃しましたが、マリオ達の方が見ていて平和な気分になりました。

blockとは

blockとは、iOS4から実装された、無名関数を定義するための構文です。
サンプルコードなどを見ていると、"^"(ハット)を使用している箇所を見かけませんか?
"^"が記載されている箇所がblock構文を使用しているコードになります。
以前の記事で言えば、iOSでアニメーションを行う方法<UIKit編>で説明している"animateKeyframesWithDuration:delay:options:^animations:^completion:"メソッドの「^animations:」「^completion:」の箇所で使用しています。

このように、block構文はその場限りで使用する関数や、コールバック関数として使用されます。
今回は、このblock構文の基本的な定義方法と利用方法を説明したいと思います。

blockの定義/呼び出し方

まずは、blockを定義します。
blockを定義する方法は以下のように3種類あります。

  • 基本型
  • typedef型
  • プロパティ型

基本型

基本型は、その場限りの関数を定義するときに使用します。
基本型の定義の仕方ですが、

このようになります。

中身の定義方法と呼び出し方は、

となります。
もちろん、下記のように宣言と定義を同時に実行しても問題ありません。

typedef型

typedef型の主な使用方法は、.hファイルに宣言し、.mファイルで中身を定義して使用します。
通常のメソッドと異なる点は、同じ引数を必要としても中身の処理を変更可能(その場限りの関数のため)な点です。
まずは、宣言方法から見ていきます。

宣言方法は基本型と同様です。先頭にtypedefが付くだけです。
実際の呼び出し方は以下の様になります。
今回は第一引数と第二引数を足し算しその値を返します。

また、上記で述べたように、同じblock構文を用いながら、中身の異なるメソッドを定義してみます。

引数は同じでも、中身の処理を変えたいという場合はたまにあるので、引数が共通している場合は便利です。

プロパティ型

3つ目はプロパティ宣言でblock構文を定義する場合です。
ポイントとしては、プロパティの属性を"copy"にしておくのがポイントです。
まずは、宣言方法からです。

使用方法は基本型・typedef型と同じですが、通常のプロパティ同様、先頭に"_"(アンダースコア)を書くことで呼び出せます。

まとめ

今回は、blockの基本的な定義方法と使用方法を説明しました。
block構文は覚えるとすごい便利なので、是非マスターしたいところです。
次回は、実際に使用する際の具体的な方法を説明しようと思います。

なめ橋

2013年4月に入社。 最近ようやくiOSの開発に慣れてきた新人のエンジニアです。 髪が長くなるとなめこに似ているといわれます。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。