簡體   English   中英

在Objective-C中,此塊有多大意義?

[英]How much sense does this block make, in Objective-C?

文檔

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

它看起來很復雜-可以用一個函數來完成同一件事嗎? 在此示例中,真正的意義是什么?

Blocks的功能就是詞匯閉包(在Python或C#等語言中也稱為lambda)。 因此,您可以

// within other code

int myVar;

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

然后,您可以傳遞塊,它將保留myVar的(副本)。 因此,閉包實際上是代碼上下文,其中蘊含着強大的力量。

在此特定示例中,即使是函數也是基本算法也不合適。 但是,該示例向您展示了塊的語法和調用約定。

塊本身作為回調或“拖放代碼”更有用。 它們是一種進行委派和代碼擴展的方法,而不必構建有狀態的函數或委托類,也不必為每個回調提供無處不在的void *contextInfo參數。

該示例的目的是向您展示如何創建塊以及它們可以做什么。 這就像“ hello world”示例,幾乎在每本書中都可以找到,但在實際應用中卻找不到。 它只是用來說明一個概念。

塊中沒有同步問題。 考慮到您在多線程中運行,“ Multiply”的兩個參數由其他線程共享。 由於它們處於“關閉”狀態,因此不會被其他線程修改,因此您無需鎖定sth,它將使代碼保持簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM