关于block(1)

作者: 村长大人tardis_cxx | 来源:发表于2016-12-02 15:49 被阅读23次

    标签: 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了吧。
    最后

    如果喜欢就给个赞呗,未完待续...

    相关文章

      网友评论

        本文标题:关于block(1)

        本文链接:https://www.haomeiwen.com/subject/rghqmttx.html