[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

関連記事

no image

EverLearn Ver.1.2.0 が公開されました

EverLearn Ver.1.2.0 が昨日公開されました。 今回は8/28にSubmitして、

記事を読む

no image

WWDC にひとりで参加する人向け情報

WWDC 2011 に行ってきたの続編。 自費で1人で参加したのだけれども、当時あまりそういう人向

記事を読む

iOS14からおんぷ先生と接続できない

下記の問い合わせがあり、調べたところ、iOS14からおんぷちゃんとおんぷ先生がBluetoothで

記事を読む

no image

iPhone SDK開発のネタ帳 マルチタッチ対応

iPhone SDK開発のレシピにはいろいろ役に立つ内容があったので、同じようなことをブログに書いて

記事を読む

no image

iPad/iPhone 開発本が山のように出るようだ

なんつーかもうすごい状況。もっと出るみたい。 Beginning iP

記事を読む

no image

メイドインジャパンとiPad、どこが違う? 世界で勝てるデジタル家電 感想

西田宗千佳氏の本はいつも面白い。 今回も予想に違わず面白かった。 自分も同じような情報は知っているは

記事を読む

no image

iOSの消音問題(iPadの本体横のスイッチの機能が設定で変更可能なためにさらにややこしいことに)

おんぷちゃん for iPad から音が出ない、というレポートが定期的に日本からも海外からも来るのだ

記事を読む

[Xcode] iOS Developer Program 証明書の更新 2018

恒例の、年に一度の証明書の更新。今年はこのページを参照した。年に一度しか行わない作業だが、さすがに迷

記事を読む

英単語学習アプリ EverLearn Ver.1.2.5 が公開されました

2016/03/05 Updateこの記事は公開時(2013年10月)から時間が経って古い内容になっ

記事を読む

大量のスクリーンショット取得作業を省力化する Sketch to AppStore vs LaunchKit

段々対応が必要な解像度が増えて、今は App Store にアプリSubmit時に4種類もスクリーン

記事を読む

Message

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

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

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

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

→もっと見る

PAGE TOP ↑