2010-09-20 21 views
0

docs這個塊在Objective-C中有多大的意義?

int (^Multiply)(int, int) = ^(int num1, int num2) { 
    return num1 * num2; 
}; 
int result = Multiply(7, 4); // result is 28 

它只是看起來很複雜 - 同樣的事情可以用一個函數來完成,或者不是?這個例子中真正的意義在哪裏?

回答

8

塊的能力就像詞法關閉(也被稱爲Python或C#等語言中的lambda)。因此,你可以做

// within other code 

int myVar; 

int (^multiplyClosure)(int) = ^(int num1) { 
    return num1 * myVar; 
}; 

然後,您可以通過這個塊周圍,它會保持一個myVar(複印件)。因此,關閉實際上是代碼上下文,其中存在權力。

2

這個例子的意義在於告訴你,塊是如何創建的以及它們可以做什麼。它就像你會在幾乎所有書中找到的「hello world」例子,但不是真正的應用程序。它只是爲了說明一個概念。

4

在這個特殊的例子中,即使是一個函數也是不合適的,因爲它是基本的算術。但是,該示例用於向您顯示塊的語法和調用約定。

塊本身作爲回調或「拖放代碼」更有用。它們是一種不需要構建有狀態函數或委託類的委託和代碼擴展方法,也不需要爲每個回調提供無處不在的參數。

1

塊中沒有同步問題。考慮到你在多線程中做的事情,「Multiply」的兩個參數被其他線程共享。它們不會被其他線程修改,因爲它們處於「閉包」狀態,所以你不需要鎖定某些東西,它會保持代碼簡單。