zoukankan      html  css  js  c++  java
  • Block

    Blocks 、和新浪微博项目有应用到

    将blocks当成对象来处理,它封装了一段代码,这段代码可以在任何时候执行。Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的。

    Blocks的定义:

           

    [cpp] view plaincopy
     
    1. int (^myBlock) (int a,int b) = ^(int a,int b){  
    2.        return a+b;  
    3.    };  



    定义了一个名为myBlock的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现,是不是有点像方法的定义?

    Blocks可以访问局部变量,但是不能修改。比如下面的代码就会报编译错 

    [cpp] view plaincopy
     
    1. int num = 0;  
    2.     //使用block  
    3.     int (^myBlock) (int a,int b) = ^(int a,int b){  
    4.         num = a+b;  
    5.         return num;  
    6.     };  


    如果要修改就要加关键字:__block (注意,是两个下划线"_")

    [cpp] view plaincopy
     
      1. __block int num = 0;  
      2.     //使用block  
      3.     int (^myBlock) (int a,int b) = ^(int a,int b){  
      4.         num = a+b;  
      5.         return num;  
      6.     };  

    作为函数的参数,blocks某种意义上替代了回调函数或者delegate。当函数调用了,假设某个事件触发,这时blocks里的内容就会运行。这样有利于代码的整合和阅读,你不需要到处去实现委托方法了。

    [cpp] view plaincopy
     

    typedefvoid (^BtnBlock)(NSString *, id);  //这样声明之后,就可以直接使用BtnBlock名来代替

    @property (retain, nonatomic) BtnBlock block;

  • 相关阅读:
    正则表达式获取远程网页
    Devexpress 常见问题
    CSS 带显示隐藏左部页面按钮
    CSS 技巧积累
    SQL 常用操作
    重置 自增字段 起始值 和 步长
    Devexpress TreeList
    Devexpress GridControl
    JS常用
    ajax跨域请求
  • 原文地址:https://www.cnblogs.com/flower42/p/3269654.html
Copyright © 2011-2022 走看看