标签: iOS 技术
写在开始之前
这篇文是关于我本人在OC开发中对block的一些认识,以实战为例,不会很全面,但应该能够为一些初学者给予一定的帮助。
那么,就请你打开Xcode,新建一个工程,然后一边看着文章,一边敲打下文中代码,相信你会有所收获的。
初遇block
相信第一次遇到block应该是UIKit
框架中的封装的核心动画方法吧,如下:
- (void)animationBlock {
// 动画
[UIView animateWithDuration:1.0 animations:^{
NSLog(@"animation!");
}];
}
系统封装的方法(API),我们不需要做更多的操作,只需要写上对动画的实现过程就可以了,是非常简单的,貌似没有什么难度,当然动画实现除外!
再遇block
除诸如动画之类的block外,当我们在实际开发中就会遇到当用代理或者通知无法解决问题时,当我们想通过次级界面向上级界面传值时,那么就应该考虑一种更加简洁而十分实用的反向传值方式,即block。
可以这么说,block是封装了一段代码块,等待着被调用
最基本的block
定义一个block,然后调用:
- (void)blockDemo {
// 定义block
// 类型 变量名 形参 = 值
void (^myBlock)(void) = ^ () {
NSLog(@"hello block!");
};
// 调用执行
myBlock();
}
说明:
上面方法中定义的block块,类型为void,变量名为myBlock,形参为void(注意:当没有参数时可以写void,也可以不写,这只是习惯而已),值为给block封装的代码块,即'='后面,是给block初始化。
这里要明白的是,''是block的标识,只要是带''这个符号那么你就迅速明白它是一个block
block的调用跟函数的调用是一样的,变量名(),如果有参数,则传入实参,无则不传
小技巧:
用快捷方式inlineblock可以快速定义block,当然前提是需要你对定义block十分熟练了,它的样子如下:
<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
<#statements#>
}
写在文末
相信看到此处的童鞋已经对block和block定义有了初步的认识了,至少明白block就是为了封装一段代码的,而且也应该会定义一个block了吧。
最后
如果喜欢就给个赞呗,未完待续...