OC11_Block

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);

排序结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值