OC_block
来源:互联网 发布:房间平面图设计软件 编辑:程序博客网 时间:2024/05/21 07:13
block 的四种形式
// 1. 无参数, 无返回值void(^block)() = ^(){ // 函数大括号里的代码段 NSLog(@"我真帅");};// block 的使用block();// block 自己不会执行,必须调用才会执行block大括号里的代码段// 2. 有参数, 无返回值void(^block)(int, int) = ^(int a, int b){int max = a > b ? a : b; NSLog(@"%d", max);};// 调用block(10, 20);// void(^)(int, int) 是 block 的类型, 它的名是 block 我们也可以通过名进行调用// 参数是一个数组, 对数组进行遍历void(^block)(NSArray *) = ^(NSArray *arr){ for (NSString *str in arr) { NSLog(@"%@", str); }};NSArray *arr = @[@"6", @"3", @"1", @"2", @"9", @"5"];block(arr);// 3. 有返回值, 无参数// 有返回值在函数段的最后加上return;NSInteger(^block)() = ^(){ return (NSInteger)100;};// block 调用时没有参数也要加上括号NSLog(@"%ld", block());// 4. 有参数, 有返回值NSString *(^block)(NSArray *, NSInteger) = ^(NSArray *arr, NSInteger index){ return arr[index];};NSLog(@"%@", block(@[@"1", @"2"], 1));NSInteger (^block)(NSString *) = ^(NSString *str){ return str.integerValue;};NSLog(@"%ld", block(@"232h323"));NSDate *(^block)(NSString *) = ^(NSString *str){ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; return [formatter dateFromString:str];};NSLog(@"%@", block(@"2015-10-13 12:43:24"));// block 的函数段中更多使用参数,而返回值更多的是调用一方使用
通过新的block 写一个block
typedef NSString *(^Block)(NSArray *);Block block = ^(NSArray *arr){return arr[0];};
block 和 局部变量
// __block 相当于给a一个在block中修改的权限, 否则它只能取值, 不能赋值__block int a = 10;void(^block)() = ^{ a = 10 * a; NSLog(@"%d", a);};block();
// 通过block对数组进行遍历
NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", nil];// 系统的block[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@", obj);}];// 系统block的用法就是回车
多态
// 准备创建两个类 BaseModel 和 Person,Person 是 BaseModel 的子类BaseModel.m 文件+(id)baseWithName:(NSString *)name sex:(NSString *)sex{ // 多态的方式完成对象的创建 id obj = [[[self class] alloc] initWithName:name sex:sex]; return obj;}main.m文件Person *per = [Person baseWithName:@"张阳阳" sex:@"男"];NSLog(@"%@", per.name);
数组排序
// 数组对字符串的排序// 不可变数组NSArray *arr = @[@"zhangyangyang", @"wuhe", @"liushanshan", @"yangli", @"wangjunmin"];// SEL是方法选择器,它是方法选择器的类型NSArray * newArr = [arr sortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@", newArr);// 可变数组NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"zhangyangyang", @"wuhe", @"liushanshan", @"yangli", @"wangjunmin", nil];[arr sortUsingSelector:@selector(compare:)];NSLog(@"%@", arr);// 对对象进行排序// 新建4个人的对象Person *per1 = [Person baseWithName:@"limuran" sex:@"nv"];Person *per2 = [Person baseWithName:@"wuhe" sex:@"nan"];Person *per3 = [Person baseWithName:@"liuxinqi" sex:@"nan"];Person *per4 = [Person baseWithName:@"shangshuai" sex:@"nan"];NSArray *arr = @[per1, per2, per3, per4];// 以学生的姓名作为排序的依据// 不可变数组NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person* obj1, Person* obj2) { return [obj1.name compare:obj2.name];}];for (Person *temp in newArr) { NSLog(@"%@", temp.name);}// 可变数组 NSMutableArray *mArr = [NSMutableArray arrayWithObjects:per1, per2, per3, per4, nil];[mArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *per11 = (Person *)obj1; Person *per22 = (Person *)obj2; return [per11.name compare:per22.name];}];for (Person *per in mArr) { NSLog(@"%@", per.name);}
0 0
- OC_block
- OC_Block
- OC_Block
- OC_block(代码块)
- OC_block数据类型,protocol协议笔记
- 杭电 3785 寻找大富翁
- POJ 1088 滑雪
- Eclipse 一直提示 loading descriptor for 的解决方法
- 2015多校第一场1003 hdu 5290 Bombing plan
- linux系统中定义的信号
- OC_block
- hdoj 1873看病要排队 【队列】
- DOM对象的小程序
- swift2 运算符函数
- hibernate 一级缓存
- 输出前50个素数
- 【wikioi】1036商务旅行
- IOS开发概述-05.UIApplication
- Direct-X学习笔记--地形