[iPhone SDK] iOS 4で導入された Blocks とは

公開日: : 最終更新日:2010/09/14 iPad, iPhone ,

Game Center を試していると、たくさんの^ (Caret というらしい。自分はハットと覚えたが) が出てきて、違う言語のコードを読んでいるような気になるが、これは、iOS 4 で導入されたBlocks の構文だ。
Blocks はAppleがドキュメントを用意してくれているのだが、まだよく分かっていないのでWebを放浪しながら理解しようと試みてみる。
A Short Practical Guide to Blocks
Blocks Programming Topics

この記事はよかった。
Programming with C Blocks on Apple Devices
しかしBlocksひとつでこんなに長い説明が必要になるとは。

ブロックの定義の書き方

戻り値の型 (^ブロック名)(引数の型)

ブロックの実装の書き方

^(戻り値の型)(引数の型 引数名) {

};

int (^Multiply)(int, int) = ^(int)(int num1, int num2) {
 return num1 * num2;
};

int result = Multiply(7, 4); // result is 28

実際には、

  • 返り値の型が返り値から分かる場合には、返り値の型を省略できる
  • 引数が無い場合は省略できる

というルールがあるので、^(void)(void) {}; と書くことはなく、^{}; となる。
これもよく見るパターンだ。
また、返り値の型は返り値から判断できるので、たいてい返り値の型は省略されるようだ。

ブロックはCの拡張とObjective-Cの拡張があるので、それもわかりづらさを助長している。
また、ブロックはスタック領域(自動変数の領域)にとられるので、何もしないとメモリが解放されてしまう。このため、Block_Copy したり、copy したりしないといけない。
これも記述的にかなりややこしくなる要因の一つだ。

例えばこんな感じで、ブロックを返す場合には copy して、後で解放されるようにautoreleaseもする必要があるようだ。

typedef void(^BasicBlock)(void);
@interface LogMessage : NSObject {
	NSString *logLevel;
}
@end
@implementation LogMessage
-(BasicBlock)printLater:(NSString*)someObject;
{
	return [[^ {
		NSLog(@"%@: %@",
			logLevel,  // (1)
			someObject // (2)
		);
	} copy] autorelease]; // (3)
}
@end

まだBlocksのことが載っている本は少ないと思うが、この本には一応数ページ載っていたので紹介。

Objective-C逆引きハンドブック
Objective-C逆引きハンドブック 林 晃

シーアンドアール研究所 2010-02-26
売り上げランキング : 6274

おすすめ平均 star
starついに出た日本語リファレンス
star初心者に優しくない内容

Amazonで詳しく見る by G-Tools

関連記事

Apple iPad まとめ

(2010/01/28 朝5時あたりのapple.comのトップページ) 2010/01/27(水

記事を読む

iPhone 16 Pro Max 購入

iPhone 16 Pro Max 256GB 189000円で2024/11/8に Ap

記事を読む

コードちゃん 1.2.1 をリリースしました

3年以上アップデートしていなかった、コードちゃん をアップデートしました。 Cmb5

記事を読む

no image

View-Based ApplicationにUINavigationControllerを追加する方法

(いろいろ間違っていたので 2009/05/13 更新) (さらに 2009/08/08 更新) こ

記事を読む

no image

2009年9月発売のiPhone SDK関連書籍

9月は書店に行くたびにiPhone SDK関連本が増えていて驚いた。 調べてみたところ、少なくとも下

記事を読む

Bluetooth MIDIキーボード KORG microKEY Airを買ってみた

以前から気になっていた、Bluetooth MIDI キーボード KORG microKey Ai

記事を読む

no image

iPhoneアプリUI研究本 iPhone User Interface Design Projects

それほど期待せずに買ったのだが、これは面白かった。 和書だと、iPhoneアプリ成功の法則に近いが、

記事を読む

no image

[iOS開発本] 15歳からはじめる iPhone わくわくゲームプログラミング教室

CALayerの使い方が書かれている本を持っていない気がしたので参考になりそうだったのと、高速バスで

記事を読む

no image

WWDC 2010 開幕

去年と違って今年はすっかりTwitterが一般化しているので、WWDCに行く人たちの様子がよくわかる

記事を読む

no image

HTML5+CSS3で作る 魅せるiPhoneサイト

iPhone向けWebページの実例を使って、CSS+HTML5の使い方を説明してくれる本。 CS

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Break Back 22巻まで読了

テニス漫画と言えば、ベイビーステップスだと思っていたし、全巻持ってい

TORRAS iPhone 16 Pro Max用ケース

自分はiPhoneはケースを付けない派で、iPhone 12

iPhone 16 Pro Max 購入

iPhone 16 Pro Max 256GB 189000

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

→もっと見る

PAGE TOP ↑