2017-06-01 25 views
-2

我正在學習目標c和swift。我沒有得到目標c或Swift中塊和方法或函數之間的區別。函數/方法與目標c或Swift中的區別有什麼區別

int mutiplier=10; 

int (^myBlock)(void)=^{ 

    return 10 *3; 
}; 
NSLog(@"%d",myBlock()); 

或者可以編寫方法/函數這樣

-(int)function:(int)num{ 

    return num* 10; 
} 

塊引用

+0

看看這個答案..https://stackoverflow.com/a/39611258/4003548。 – vaibhav

+0

這是我對這個話題的狹隘理解,但我認爲,方法和塊在概念上非常相似。其他語言有像「lambda函數」或「閉包」這樣的概念,它們也非常相似。我想,考慮塊的一種方式是無名稱函數,除了無名之外,它還保留了本地範圍。 – Baglan

回答

1

短而簡單:

的代碼
  1. 塊 - 只是一個塊碼。你可以聲明它,定義塊的類型(然後創建一個實例),逐塊調用塊等。塊可以帶參數,可以返回一些東西,與Grand Central Dispatch一起使用它們非常方便。塊可以在代碼中間聲明,作爲實例變量或屬性。它們也可以作爲參數傳遞給方法/函數調用。在塊完成其工作後,您可以調用'完成'部分來運行某些特定的代碼,這在某些情況下很方便。在類似於塊的快速語言(但不等於)的事情是封閉。想補充一點,在Objective-c中有一個基於塊的枚舉方法,它幾乎和Fast枚舉一樣快。會推薦大多數情況下快速枚舉,但有時(罕見)塊枚舉更好。其他循環通常不如這兩個循環快。一個更重要的事情我們應該記住的是,塊是Objective-C對象函數和方法都沒有。塊可以從封閉範圍的變量中捕獲值,同時在需要將這些變量作爲參數傳遞的函數/方法中獲取相同的值。使用塊甚至可以使用f.e來更改這些變量。

    __block int anInteger = 123; 
    

    塊調用之前的語法。 請注意,在捕獲塊內部時避免強烈參考self以避免保留週期。在這種情況下使用weakSelfhttps://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

  2. 函數應該有名字,返回一些東西或者是無效的。

  3. 方法是一個類的功能。

+0

謝謝亞歷山大 –

+0

歡迎您! – Alexander

0

塊是一種包裝一段代碼並有效存儲以供將來使用的方式。一個塊通常用來代替回叫功能。 iPhone SDK中較新的API以這種方式使用塊。該API將採取一個「塊」代碼,它將在完成時運行。並且塊以快速呈現爲關閉

在swift中,學習閉包有點難。但是當你開始使用它的時候,相信我是非常方便的。

它可以節省您不必創建自己的線程並維護每個線程的狀態,管理鎖定,設置autorelease池等。

此外,與Grand Central Dispatch(GCD)一起使用時,API塊可以在隊列上運行,並且可以使代碼的整個部分以非常小的代價異步運行,但仍然保持多線程代碼所需的健壯性。

相關問題