我正在瀏覽Apple的文檔,我看到類似(void (^)(void))
的東西。有人可以解釋這個說法是什麼意思嗎? ^
是XOR,對吧? void XOR void
對我沒有多大意義?類型之間的字符而不是變量,用圓括號括起來
也有類似(void (^)(BOOL finished))
我正在瀏覽Apple的文檔,我看到類似(void (^)(void))
的東西。有人可以解釋這個說法是什麼意思嗎? ^
是XOR,對吧? void XOR void
對我沒有多大意義?類型之間的字符而不是變量,用圓括號括起來
也有類似(void (^)(BOOL finished))
這些都是增加匿名函數和函數對象的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"); }];
這是一個block,一個與C相似的蘋果專用擴展函數指針或其他語言的函數對象。
(void (^)(void))
看起來像一個類型轉換爲一個不帶參數且不返回任何內容的塊的類型。類似地,(void (^)(BOOL finished))
看起來像另一個類型轉換,與具有一個布爾參數的塊並且不返回任何內容。
謝謝你們...... 你是我的英雄;) – 2010-06-20 15:29:09