注:工作中的一点总结
-
简化block 定义,以便更加方便的使用
typedef int(^MyBlock)(int, int);
-
block 的简单使用
1 作为属性使用
@property (nonatomic,copy)MyBlock block;
2 我们开发中用到的最多就是传值
例:假如我们有一个这样需求:A push 到 B 页面,我们需要B页面返回 A 页面时,修改A页面的背景色,或者一些其他的操作。实现方法
一
我们在 B页面声明一个block,作为参数
@property (nonatomic, copy) void(^colorBlock)(UIColor *color);
注:站在 c 语言的角度看block ,其实block 本质就是一个匿名函数,这里使我们有时候经常忽略的一点,导致自己定义的block出问题,这里做一个简单记录。因block 本质是一个函数,当我们定义了它的时候,我们想要监控block内部代码的逻辑,那么我们必须调用函数,这样才能进入到函数的内部。但是我们在用block 的时候又是经常忘记这步,也就是block 调用的步骤
block 的调用if (self.colorBlock) { self.colorBlock(color);// 回调函数的调用 }
既然有了调用,那么我们就得有block的具体实现了,也就是我们想要做的操作
我们在 A 页面 实现 block 的具体操作(这里只是修改下背景色)
// 首先创建 B对象 B = [[B alloc] init]; // 调用B 里面的block属性,并实现 B.colorBlock = ^(UIColor *color){ // A 页面的背景色设置 }
二 block 作为某个方法的参数 这是我们经常忽略的一点
假如我们写了一个方法:
CreateControllerWithBlock:(colorBlock)block
b = [[B alloc] init]
[b CreateControllerWithBlock:^(UIColor *color){
// block 里面代码的实现操作
}]
当我们调用这个方法时,我们调用这个方法时,有时会忘记block的工作原理,或者忽略block,从而导致必不能理想办的进入到block函数里面,这点和我们上述提到的其实是同一个问题
注:核心,不管block是作为参数还是属性,要想执行block面的内容,那么必须得有block的对应的调用部分才可以。
假如对block仍有疑惑,或者很感兴趣,可以去看block 的具体实现以及本质,这里只是做了一个简单的记录。
网友评论