重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
Block:語法塊,本質(zhì)上是匿名函數(shù)(沒有名稱的函數(shù))
標(biāo)準(zhǔn)C里面沒有Block,C語言的后期擴(kuò)展版本,加入了匿名函數(shù)
在C++、JS、Swift等語言有類似語法,叫做閉包
Block語法和C語言里的函數(shù)指針很相似,下面我們先來回顧下C語言中的函數(shù)和函數(shù)指針
C語言中函數(shù)是指:實現(xiàn)某一功能的代碼段
完整的函數(shù)包括兩部分:函數(shù)聲明、函數(shù)定義
函數(shù)聲明,即函數(shù)原型。例如:int sum (int x,int y);具有兩個×××參數(shù),一個×××返回值的函數(shù)
函數(shù)定義,即函數(shù)實現(xiàn)。例如:int sum(int x,int y){
return x + y;
}
函數(shù)指針(變量):存放函數(shù)地址(函數(shù)名)的指針變量
int(*p)(int x,int )= sum;
函數(shù)指針類型:int(*)(int x,int y)即:指向兩個×××參數(shù),一個×××返回值函數(shù)的指針
函數(shù)指針變量:p
函數(shù)指針的值:sum
Block 匿名函數(shù):沒有名稱的函數(shù)
例如:int (int x,int y)
因為Block是匿名函數(shù),block變量存放的函數(shù)的實現(xiàn),通過block變量能直接調(diào)用函數(shù)
Block類型:int (^)(int)
Block變量:myBlock
Block值:^int (int num) {return 7*num;}
即:^返回值類型(參數(shù)列表){函數(shù)體}其中返回值類型可以省略
例如:寫一個 返回值為××× 參數(shù)為OC字符串(僅一個參數(shù))的block,實現(xiàn)將字符串轉(zhuǎn)換為×××的功能
int (^myBlock)(NSString *) = ^(NSString *string) {
return [string intValue];
};
NSLog(@"%d",myBlock(@"123"));
block的數(shù)據(jù)類型代表了匿名函數(shù)的格式(返回值類型,形參的類型)
block變量的定義與函數(shù)指針變量的定義類似,唯一區(qū)別于函數(shù)指針變量的是變量名前通過脫字符(^)修飾
首先應(yīng)該用^修飾,剩余的部分與C語言函數(shù)定義一致,大的不同就是沒有函數(shù)名(同時返回值類型也可以省略)
block變量在定義時具有變量定義的基本特征,賦值號右側(cè)的匿名函數(shù)可以當(dāng)做一個整體被賦值,類似于 int a = 5;
block變量所賦的值是匿名函數(shù)。又兼具函數(shù)的特征,并且是唯一可以定義在某個函數(shù)實現(xiàn)內(nèi)部(C語言中認(rèn)為函數(shù)是不能嵌套定義的,block是個特例)
Block進(jìn)行typedef
typedef int (^BlockType)(int x,int y)
原類型:int(^)(int x,int y)
新類型:BlockType
類比函數(shù)指針的類型定義,格式與函數(shù)指針一致,類型定義一定程度上簡化了block的使用。
typedef int (^SumType)(int,int);
SumType sumBlock = ^(int x,int y) {
return x + y;
};
int result = sumBlock(5,4);
NSLog(@"%d",result);
__block類型標(biāo)識可以運行局部變量在其后續(xù)定義的block內(nèi)部正常訪問,
__block int num = 0;
void (^testBlock)() = ^() {
for (int i = 0; i < 10; i++) {
count++;
num++;
NSLog(@"%d",count);
}
};
block調(diào)用
testBlock();
數(shù)組使用Block排序
數(shù)組使用Block對兩個字符串進(jìn)行比較
NSComparisonResult (^compareBlock)(NSString *,NSString *) = ^(NSString *str1,NSString *str2) {
return [str2 compare:str1];
//如果是升序返回-1,如果是降序返回1,如果相等返回0
};
NSLog(@"%ld",compareBlock(@"11",@"12"));
NSArray *array = @[@1,@2,@13,@12,@23];
NSArray *resultArray1 = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",resultArray1);
數(shù)組使用Block排序 降序排列
NSComparator sortBlock = ^(id obj1,id obj2) {
return [obj2 compare:obj1];
};
NSArray *resultArray2 = [array sortedArrayUsingComparator:sortBlock];
NSLog(@"%@",resultArray2);
升序序排列
NSArray *resultArray3 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
NSLog(@"%@",resultArray3);
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。