2010-06-20 22 views

回答

13

這些都是增加匿名函數和函數對象的Objective-C塊。見例如Introducing Blocks and Grand Central Dispatch

塊對象(非正式地,「嵌段」)是一個擴展到C,以及目標C和C++,即很容易讓程序員定義工作的自包含單元。塊與 - 傳統函數指針相似,但功能要強大得多。關鍵的區別是:

  • 塊可以聯定義,爲
  • 塊捕獲只讀局部變量的副本,在其他語言類似「倒閉潮」
「匿名函數」。

聲明一個塊變量:

void (^my_block)(void); 

分配一個塊對象到它:

my_block = ^(void){ printf("hello world\n"); }; 

調用它:

my_block(); // prints 「hello world\n」 

接受一個塊作爲一個參數:

- (void)doSomething:(void (^)(void))block; 

使用該方法具有內嵌塊:

[obj doSomeThing:^(void){ printf("block was called"); }]; 
+0

謝謝你們...... 你是我的英雄;) – 2010-06-20 15:29:09

1

這是一個block,一個與C相似的蘋果專用擴展函數指針或其他語言的函數對象。

(void (^)(void))看起來像一個類型轉換爲一個不帶參數且不返回任何內容的塊的類型。類似地,(void (^)(BOOL finished))看起來像另一個類型轉換,與具有一個布爾參數的塊並且不返回任何內容。

相關問題