美文网首页
iOS知识点之二block的一些简单的用法总结

iOS知识点之二block的一些简单的用法总结

作者: 小明是大叔 | 来源:发表于2016-07-25 11:40 被阅读41次

    之前写过一篇关于通知的文章,可能大家觉得block部分不够清晰,本文会做详细一点的说明

    老样子,先上图和文档,官方的

    blocks.jpg

    Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block can therefore maintain a set of state (data) that it can use to impact behavior when executed.
    Blocks are particularly useful as a callback because the block carries both the code to be executed on callback and the data needed during that execution

    block 是iOS开发中很频繁使用的一种数据类型,很类似于c语言的函数,特别是用在回调的场景中,下面就总结一些常见的声明block的方法,书写都是统一的,看上面的图就很侵袭了

    作为属性的block

    书写格式(一下格式都会有一个非block的作对比,最后总结)

    // 对比用
    @property (nonatomic, strong) NSString *name;
    // void为返回值类型,^myBlock为block名,UIButton *buttonClicked为参数的类型,参数数量不限,这里只写了一个,而且参数的名字也是可以省略的
    @property (nonatomic, copy) void (^myBlcok)(UIButton *buttonClicked);

     **使用场景**
    
    >其实这里的使用就和delegate方法相似,只不过更简单.例如,你在一个view中点击了一个按钮,要通知控制器做出反应,你就可以在这个view中定义这样一个block,然后在控制器实现
    ```objc
    // 以下代码只是部分代码
    // 控制器中实现
    [view setMyBlock:^(UIButton *buttonClicked) {
            NSLog(@“view的%@按钮被点了,该干啥干啥去”, buttonClicked);
        }];
    

    // view中调用,通知
    if (_myBlock) {
    _myBlock(buttonClicked);
    }

    
    **上面说的都是无返回值的,有人会问那有返回值的呢?上代码**
    
    >```objc
    // view中定义了这样一个有参数的block
    @property (nonatomic, copy) int (^noEasyBlock)(int, int);
    

    // 控制器中实现
    [view setNoEasyBlock:^int(int a, int b) {
    return a + b;
    }];

    >```objc
    // view中调用
    if (_noEasyBlock) {
            NSLog(@"%d",_noEasyBlock(3,5));
        }
    

    总结:带返回值的就是我通知你,你也得通知我,有需求时你自然会用上的,trust me!

    作为参数的block

    // 对比用

    • (void)testButtonClicked:(UIButton *)buttonClicked;
      // 类比上面的就很容易记住,都是(类型) + 名
    • (void)buttonClicked:(void(^)())buttonClicked;
    >总结:block作为参数时,其实使用场景和上面差不多,具体具体开发中自己可以体会,如果block使用的娴熟,delegate很少用了,毕竟要多写个协议,麻烦一些,当然delegate做通知的时候,条例,结构什么的确实清晰一些,不容易犯晕,代码的易读性也好一些.
    
    ####文章中可能会有知识点使用错误或者讲解不充分的地方,欢迎留言指正和探讨.

    相关文章

      网友评论

          本文标题:iOS知识点之二block的一些简单的用法总结

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