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
原创粉丝点击