前言:block是從iOS4開始引入的一個新特性,block是對C語言的一個擴展杜秸,在Objective-C中完全支持见秤。block在現(xiàn)在的iOS開發(fā)中越來越普遍幔欧,因為block在使用起來非常強大,簡單來說娜遵,block就是封裝了一組代碼語句的對象蜕衡,可以在任何時間執(zhí)行。
1设拟、Block簡介
Block塊是封裝工作單元的對象慨仿,是可以在任何時間執(zhí)行的代碼段。其本質(zhì)上是可移植的匿名函數(shù)蒜绽,可以作為方法和函數(shù)的參數(shù)傳入镶骗,可以從方法和函數(shù)中返回《阊牛—(翻譯自官方文檔)
塊是對C語言的一種擴展鼎姊,它并未作為標(biāo)準(zhǔn)的ANSI C所定義的部分,而是有蘋果公司添加到語言中的相赁。塊看起來更像是函數(shù)相寇,可以給塊傳遞參數(shù),塊也可以具有返回值钮科。
2唤衫、Block的定義與調(diào)用
塊是以插入字符^開頭,后面的一個括號()內(nèi)表示塊所需要的參數(shù)绵脯,最后面的大括號{}中是塊主體佳励,最后以分號;結(jié)束。如下面代碼所示:
^(intinputNum){
NSLog(@"printBlock Called!");
returninputNum;
};
同時蛆挫,也可以將這個塊賦值給一個變量printBlock赃承,聲明方式如下。其中悴侵,變量printBlock就是指向代碼塊的指針瞧剖。
int(^printBlock)(int)=^(intinputNum){
NSLog(@"printBlock Called!");
returninputNum;
};
當(dāng)需要調(diào)用已經(jīng)定義的block時,可以使用如下方式,和函數(shù)調(diào)用十分類似抓于。
inti=printBlock(100);
3做粤、把Block聲明為類的屬性
由于Block就是一個存儲了一段代碼的對象,因此捉撮,也可以把Block設(shè)置為某個類的屬性怕品。同時,可以用self.blockProperty來給該屬性賦值巾遭。
@interfaceViewController()
@property(copy)void(^blockProperty)(void);
@property(copy,nonatomic)void(^blockPropertyWithInput)(int);
@end
-(void)viewDidLoad{
[superviewDidLoad];
//blockProperty
self.blockProperty=^{
NSLog(@"blockProperty is called!");
};
self.blockProperty();
//blockPropertyWithInput
self.blockPropertyWithInput=^(inti){
NSLog(@"blockPropertyWithInput is Called! I Value is %d",i);
};
self.blockPropertyWithInput(150);
}