zoukankan      html  css  js  c++  java
  • OC----Block语法

    Block
    • Block封装了一段代码,可以在任何时候执行
    • Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:block是inline(内联函数)的,并且默认情况下它对局部变量是只读的
    • 苹果官方建议尽量多用block。在多线程、异步任务、集合遍历。集合排序。动画转场用的很多
     
    Block的定义:
    int (^Mysum) (int,int)  =  ^ (int a,int b){
        return a+b;
    };
    定义了一个叫Mysum的block对象,它带有两个int参数,返回int。等式右边就是block的具体实现
    Block可以访问局部变量,但是不能修改。
    int sum =10;
    int (^MyBlock) (int) = ^(int num){
       sum++;//编译报错
      return num*sum;
    };
    如果要修改就要加关键字:__block(block前是两个下滑线)    例如:   ( __block int sum=10;)
     
    另外我们也可以用typedef定义block,例如:
    typedef int (^Mysum)(int a,int b)
    void test(){
      //声明一个block变量
      Mysun sum=^(int a,int b){
             return a+b;
       }
       NSLog(@“%i”,sum(10+10))
    }
     
     
    Block可以访问局部变量,默认情况下是只读,不能修改,例如:
    void test2(){
      //在block外定义一个变量c
      int c=1;
      Mysum sum=^(int a,int b){
         //在block内部打印一下外部的c
         NSLog(@“%i”,c);
         return a+b;
      }
      NSLog(@“%i”,sum(10,10);
    }
    如果想要修改,需要加__block关键字,block前是两个下划线
     
    利用block做监听器,例子:
    //main.m文件
    void test(){
      Butoon *btn=[[Button alloc] init];
      btn.block=^(Button *btn){
         NSLog(@“按钮被点击了”);
       }
      [btn click];
    }
    Button.h文件
    @class Button;
    //定义一个block,传递Button类型的参数
    typedef void (^Buttonblock)(Button *btn);
    @property (nonatomic, assign)Buttonblock block;
    -(void)click;
    Button.m文件
    -(void)click{
      _block(self);
    }

    指向函数的指针跟block的区别:
    int (^sum) (int,int)=^(int a,int b){
       return a+b;
    };//block
    int (*sum)(int,int)=sum;
    int sum(int a,int b){
     return a+b;
    }//函数
     
     
     
  • 相关阅读:
    MongoCola Web化
    Qsys在系统集成中的应用
    js浏览器和浏览器插件检测的方法总结
    搭建一个简单的Struts2应用
    Moon.ORM最便捷轻盈的ORM
    如何从 Winform 移植到 Webform [自己搞定HTTP协议]
    细细品味Hadoop_Hadoop集群(目录)
    微软SQL Server 2012新特性Silverlight报表客户端 Power View
    json入门实例
    项目经理
  • 原文地址:https://www.cnblogs.com/hqzxbb/p/4393613.html
Copyright © 2011-2022 走看看