main.m
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
1.函数指针 函数回调 动态排序
Block 块语法
本质 匿名函数
类似 函数指针
当做 变量使用
四类Block
(1).无参数,无返回值.
block1 block变量
void(^)(void) block类型
^void(void){函数体} block初值(匿名函数)
void(^block1)(void) = ^void(void) {
NSLog(@“无参数,无返回值”);
};
block调用,类似函数调用.
block1();
(2).有参数,无返回值.
参数1:字符串.
参数2:可变数组.
void(^block2)(NSString *, NSMutableArray *) = ^void(NSString *string, NSMutableArray *array) {
[array addObject:string];
NSLog(@"%@", array);
};
参数传入.
block2(@"Messi", [NSMutableArray array]);
(3).无参数,有返回值.
block 初值可以不写返回值类型.(NSInteger可以不写)
NSInteger(^block3)(void) = ^NSInteger(void) {
return 100L
}
NSLog(@"%ld", block());
(4).有参数,有返回值.
NSMutableDictionary *(^block4)(NSString *, NSMutableArray *) = ^NSMutableDictionary *(NSString *string, NSMutableArray *array) {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setObject:array forKey:string];
return dic;
}
NSLog(@"%@", block4(@"Messi", @[@"AA", @"BB"]));
*****注意*****
(1).等号后面的参数,类型和位置必须一致;等号后面的参数一定要有参数名.
(2).如果有返回值,返回值的类型必须一致.
return 0;
}
2.block和变量之间的关系.
NSInteger value = 100L;
void(^blockTest)(void) = ^void(void) {
NSLog(@“%ld, %ld“, value, ++a); // NSLog(“%ld, %@“, value, a); 如果在value前++, 会报错,value = 100L,这样后面就可以在value前++.或者在NSInteger前加static,static NSInteger value = 100L,这样后面就可以在value前++,或者将NSInteger value = 100L写在main之上.
}
blockTest();
#import <Foundation/Foundation.h>
// 在main上方写变量了声明.
NSInteger *a = 123;
int main(int argc, const char * argv[]) {
3.block重定义的使用.
#import <Foundation/Foundation.h>
// block 重定义
typedef void(^BLOCK)(id);
int main(int argc, const char * argv[]) {
// block重定义的使用.
BLOCK blockPrint = ^(id object) {
NSLog(%@, object);
};
blockPrint(@[@"messi", @"kaka"]);
}
4.高级排序,block排序
main.m
(1).block排序器
NSArray *arr = @[@"meiss", @"kaka", @"ABC", @"GHJ"];
NSComparator blockCMP = ^(id obj1, id obj2) {
// 升序
return [obj1 compare:obj2];
// 降序
return -[obj1 compare:obj2];
};
NSArray *newArr = [arr sortedArrayUsingComparator:blockCMP];
blockPrint(newArr);
结合上面的block重定义的使用方法
(2).排序
NSArray *nnArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return -[obj1 compare:obj2];
}];
blockPrint(nnArray);
(3).可变数组
NSMutableArray *mArr = [NSMutableArray arrayWithArray:arr];
[mArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
blockPrint(mArr);