testblock = ^( char *s) { printf( "String is %s\n" , s); };
testblock( "TEST!" );
* This source code was highlighted with Source Code Highlighter .
まもなく、そのようなデザインは、Mac OS、そしておそらくiPhone OS用のアプリケーションでますます見つかるでしょう。
2008年夏の終わりに、Appleはコード名「Blocks」の下でC / C ++ / Obj-Cの拡張に取り組んでいると発表しました。
なんでこんなこと?
クロージャーを使用すると、コードがより明確で明確になることがよくありますが、それがAppleが行動した唯一の理由ではありません。
macresearch.comが1年前に推測したように、これは2009年6月に確認された「マルチコア戦争」とも関連しています。AppleはGrand Central Dispatch (Macの重要な要素の1つ) OS X 10.6 Snow Leopard)。
Grand Central Dispatchを使用すると、さまざまなキューをコードブロックで簡単に操作できます(これは非常に興味深いことに簡単に書かれています)。マルチコアシステムのリソースをより効率的に使用できます。
プログラマーからはどのように見えますか?
これは、Snow LeopardからXcodeにアクセスできる開発者だけでなく、Mac OS X 10.5用のPLBlocksツールチェーン/ランタイムをインストールするすべての人が理解できます。 このプロジェクトには、「高度な」GCC、Xcode用プラグイン、および必要なフレームワークが含まれています。 このコードはどこから来たのですか? PLBlocksの作者は、実際にAppleのGCCパッチを 10.5に移植しました。 インストールはプロジェクトページで説明されており、問題はありません。
15分で書いたサンプルコード:
#include <stdio.h>
#include <string.h>
void run_callback( char *s, void (^callback)( int len)) {
printf( " %s:" , s);
callback(strlen(s));
}
void print_numbers( int *array, size_t array_size, int (^chooser)( int )) {
int i;
for (i = 0; i < array_size; i++)
if (chooser(array[i]))
printf( "%4d" , array[i]);
printf( "\n" );
}
int main ( int argc, const char * argv[]) {
void (^testblock)( char *);
testblock = ^( char *s) { printf( "String is %s\n" , s); };
testblock( "TEST!" );
int test[] = { -1, 5, 91, -45, 0, 4, -43, 42 };
int len = sizeof (test)/ sizeof ( int );
printf( "all numbers:\n " );
print_numbers(test, len, ^( int n) {
return 1;
});
printf( "positive only:\n " );
print_numbers(test, len, ^( int n) {
return n > 0;
});
int factor = 2;
printf( "another demo..\n" );
run_callback( "hello" , ^( int len) {
int i;
for (i = 1; i <= len*factor; i++) printf( "%3d" , i);
printf( "\n" );
});
return 0;
}
* This source code was highlighted with Source Code Highlighter .
実行結果:
文字列はテストです!
すべての数字:
-1 5 91-45 0 4 -43 42
ポジティブのみ:
5 91 4 42
別のデモ...
こんにちは:1 2 3 4 5 6 7 8 9 10
この例は非常に単純です。 確かに、C / Obj-CのコードブロックのテーマとGrand Central Dispatchの使用は、はるかに広く深くなっています。
他に読むものは何ですか?
さらに読むために特別に選択された資料(英語):
- Grand Central Dispatch Technology Brief (アップル)
- 金曜日のブロックに関するQ&A 。
- ブロックの例:NSOperationQueueおよびUIActionSheet
- ブロックの使用:メモリ管理ルールについて
- ブロック、エピソード1
- ブロック、エピソード2:ライフサイクル
- ブロック実装仕様 (Apple、LLVM)
Snow Leopardのリリースと新しいXcodeを楽しみにしています。 ただし、ブロックがiPhone OSにも表示されるという証拠はありません(前述のPLBlocksの実装を除く)。
全体として、これは素晴らしいことです。