iOS 中 Block 和 Closures 簡介

2021-07-23 03:03:43 字數 2033 閱讀 1773

目前ios開發有兩種語言,objective-c 和swift。在objective-c中,block的使用非常頻繁,在開發中佔據了很重要的位置。 closures,通常被稱作閉包,同樣是swift語言中很重要的乙個部分。其功能類似objective-c中的block。

先回顧一下block的用法:

通常來說,block的作用是儲存一段**,在需要的時候去執行。

一,宣告

block的語法格式為:

returntype

(^blockname)

(parametertypes)

返回值型別(^block的名字)(引數)

block 的宣告方式和普通物件一致,有使用@property定義和直接定義兩種方式;

@property (nonatomic, copy) void(^myblock)(void);

void(^myblock)();

在方法內部使用直接宣告的,可以直接在宣告的時候進行定義:如:

void(^myblock)() = ^(void);

二、使用

block 在使用過程中,有多種形式。分別為 無引數 無返回值、有引數 無返回值, 和 有引數 有返回值 這幾種。下面分別列舉一下:

1、無引數 無返回值

[self postdata:^];

- (void)postdata:(void(^)())finished

2、 有引數,無返回值

[self newloaddata:^(nsdata *data) ];

- (void)loaddata:(void(^)(nsdata *data))finished

3、有引數,有返回值

int s =  sunblobck(1,2);

int(^sunblobck)(int,int) = ^(int a, int b);

在swift中,closures(閉包)的作用和block類似,也是用來儲存**塊,延緩執行,保證執行順序的。

一、宣告

閉包的格式為:

(parametertypes)->(returntype) in

(形參列表) -> (返回值) in

二,使用

對比上文的bolck,這裡的閉包也按照 無引數 無返回值、有引數 無返回值, 和 有引數 有返回值 這幾種進行介紹。

1、無引數 無返回值

//函式定義

func loaddata(finished:() -> ())

//呼叫方法

1、將閉包作為函式的乙個實參【swift3.0之前 閉包作為乙個引數,可以省略finished:閉包名,但在3.0是會報錯的。】

loaddata

(finished:)

/*另外無引數無返回值 的 可以省略 ()->() in

loaddata (finished: )

*/2、如果閉包是函式的最後乙個引數,閉包可以寫在函式()的 後面,此時沒有函式名finished:

loaddata()

同樣無引數無返回值 的 可以省略 ()->() in

loaddata()

或者:loaddata

2、 有引數,無返回值

func loadresultdata(finished:(data) -> ()) ->()

}//呼叫

loadresultdata

3、有引數,有返回值

let sum = 

print(sum(2,3))//5

以上就是objective-c中的block 和swift中 closures 的簡單介紹以及對比。這些只是基礎,同block一樣,closures也有很多高階用法。需要學習的還有很多。

書山有路勤為徑,學海無涯苦作舟。

iOS中block的定義和使用

1.block可以用來儲存一段 或者用來封裝一段 段,塊。2.block的標誌是 3.block跟函式很像 可以儲存 可以有返回 值 也可以有行參 呼叫方式一樣 4.定義乙個block pragma mark 不帶引數的block void outputblock outputblock 5.帶行參...

iOS 中的block異常

ios 知識小集 我們在呼叫block時,如果這個block為nil,則程式會崩潰,報類似於exc bad access code 1,address 0xc 異常 32位下的結果,如果是64位,則address 0x10 如圖1,這個異常表示程式在試圖讀取記憶體位址0xc的資訊時出錯。在定義乙個b...

IOS中Block的使用

block的宣告 1,void myblock 2,int myblock float,int 3,nsstring myblock int,nsstring 也可以使用typedef為block定義別名。三種block的特性 block是乙個object物件,所以我們需要對它進行記憶體管理。blo...