我正在學習目標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;
}
塊引用
我正在學習目標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;
}
塊引用
短而簡單:
的代碼塊 - 只是一個塊碼。你可以聲明它,定義塊的類型(然後創建一個實例),逐塊調用塊等。塊可以帶參數,可以返回一些東西,與Grand Central Dispatch一起使用它們非常方便。塊可以在代碼中間聲明,作爲實例變量或屬性。它們也可以作爲參數傳遞給方法/函數調用。在塊完成其工作後,您可以調用'完成'部分來運行某些特定的代碼,這在某些情況下很方便。在類似於塊的快速語言(但不等於)的事情是封閉。想補充一點,在Objective-c中有一個基於塊的枚舉方法,它幾乎和Fast枚舉一樣快。會推薦大多數情況下快速枚舉,但有時(罕見)塊枚舉更好。其他循環通常不如這兩個循環快。一個更重要的事情我們應該記住的是,塊是Objective-C對象而函數和方法都沒有。塊可以從封閉範圍的變量中捕獲值,同時在需要將這些變量作爲參數傳遞的函數/方法中獲取相同的值。使用塊甚至可以使用f.e來更改這些變量。
__block int anInteger = 123;
塊調用之前的語法。 請注意,在捕獲塊內部時避免強烈參考self
以避免保留週期。在這種情況下使用weakSelf
。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html
函數應該有名字,返回一些東西或者是無效的。
方法是一個類的功能。
謝謝亞歷山大 –
歡迎您! – Alexander
塊是一種包裝一段代碼並有效存儲以供將來使用的方式。一個塊通常用來代替回叫功能。 iPhone SDK中較新的API以這種方式使用塊。該API將採取一個「塊」代碼,它將在完成時運行。並且塊以快速呈現爲關閉。
在swift中,學習閉包有點難。但是當你開始使用它的時候,相信我是非常方便的。
它可以節省您不必創建自己的線程並維護每個線程的狀態,管理鎖定,設置autorelease池等。
此外,與Grand Central Dispatch(GCD)一起使用時,API塊可以在隊列上運行,並且可以使代碼的整個部分以非常小的代價異步運行,但仍然保持多線程代碼所需的健壯性。
看看這個答案..https://stackoverflow.com/a/39611258/4003548。 – vaibhav
這是我對這個話題的狹隘理解,但我認爲,方法和塊在概念上非常相似。其他語言有像「lambda函數」或「閉包」這樣的概念,它們也非常相似。我想,考慮塊的一種方式是無名稱函數,除了無名之外,它還保留了本地範圍。 – Baglan