⼀、Block語法
Block:塊語法,本質上是匿名函數(沒有名稱的函數)
標準C⾥⾯沒有Block,C語⾔的後期擴展版本,加⼊了匿名函 數。
C++、JS、Swift等語⾔,有類似語法,叫做閉包。
Block語法和函數指針很相似。
匿名函數:沒有名稱的函數
int (^Block)(int a,int b)= ^int (int a,int b)
// block
類型 int (^)(int a,int b)
// // block
名 Block
// // block
值
匿名的函數
並且類型與Block類型相同
// //
匿名函數是函數
其函數中定義的變量
存在棧區
即:^ 返回值類型 (參數列表){函數體} 其中 返回值類型 可以 省略。
⼆、Block使⽤
int (^block1)(int x,int y) = ^(int x,int y){ return x + y; };
int a = block1(32 , 34);//block的使⽤和函數指針的使⽤類似。
NSLog(@“%d”,a);
打印結果:66
// __block int num=1;
// void(^addsum)(void) =^(void){
// num++;
// NSLog(@"%d",num);
// };
// addsum();
局部變量在block中要向上面在變量前加__block雙劃線block才能改全局變量可以改
typedef int (^BlockType)(int x,int y) 原類型:int (^)(int x,int y) 新類型:BlockType
三、Block實現數組排序
//block
排序
//實現部分填寫obj1和obj2關係
//實現原理:數組中兩個元素進行比較後返回值如果前面比後面大則交換到最後完成排序
//
能夠比較
字符串 NSNumber
//
語法糖
初始化NSNumber類型方法
// NSNumber *n2 = @11;
//先確定類型
//
根據類型確定升序還是降序
// NSComparisonResult (^MyCompare) (id obj1,id obj2) = ^NSComparisonResult (id obj1,id obj2){
// NSNumber *n1 = (NSNumber *)obj1;
// NSNumber *n2 = (NSNumber *)obj2;
//
// if ([n1 compare:n2]>0) {
// return
NSOrderedDescending;
// }else if([n1 compare:n2 ]==0)
// {
// return
NSOrderedSame;
//
// }
// else
// {
// return
NSOrderedAscending;
// }
// };
// 需要什麼類型就給什麼類型
總結
block是蘋果最推崇的語法,iOS4.0之後的類都添加了block⽀ 持。
block通常當參數來使⽤。 字⾯量是⼀種新型的寫法,能在⼀定程度上簡化代碼。
字⾯量創建的對象是便利構造的,且是不可變的。
// exchange方法
// [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
// 切記
字面量使用的初始化方法
是類方法的初始化
// Block標誌 ^
託字符(突起符)
// // Block保存的是
有特定功能的功能體
// //
數據類型 +
變量名 =
初值