• Blocks语法


    一、Blocks

      Block是一个C Level的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从IOS4.0开始就很好地支持Blocks。Blocks主要用在一些回调函数的用法上,2个对象通信需要一些回调的时候,比如说2个对象在运行,我们需要知道其中一个对象什么时候完成,我们就需要一个回调函数,之前我们用代理,但是有些小的地方用代理大材小用,Blocks可以用来做一些代理的很好地支撑,可以用来做边界或者一些地方的回调函数。

    心得:Blocks实质其实就是回调函数。

    二、C函数指针和Blocks申明

     C语言函数指针 int (* CFunc)   (int          a)

            返回值 变量名  参数类型 参数值

      Blocks            int(^  BFunc)   (int    a)

    三、C函数指针和Blocks调用

      1、C函数指针调用:

        int(* CFunc)(int a)函数调用

        int ret=CFunc(100);

      2、Blocks调用

        int(^BFunc)(int a)函数调用

        int ret=BFunc(100);
    四、Blocks typedef 类型定义

      C语言函数指针typedef

      typedef int(*SumBlockT)(int a,int b)

      Blocks typedef 定义

      typedef int(^SumBlockT)(int a,int b)

    五、_ _block关键字

      1、这个关键字主要是用在Blocks里面需要和一个函数通讯来修饰一些临时变量

      比如说:我们函数里面有一段blocks,这个blocks里面需要修改函数里面的一些方法, 那么函数里面的变量是一些临时变量,当这个函数调完了的时候,这个变量就没有了。就从这个栈当中销毁了。_ _blocks就是说可以让这个变量成为全局的。我们在Blocks里面调用的时候就可以修饰这里面的变量。

      2、一个Block的内部是可以引用自身作用域外的变量的,包括static变量,extern变量或自由变量(定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量auto,auto变量保存在stack中的。除了auto之外还存在register,static等存储修饰符),对于自由变量,在Block中是只读的。在引入block的同时,还引入了一种特殊的_ _block关键字变量存储修饰符

    六、Blocks案例

    我们在给这个函数赋值的时候,myblocks3的变量sum还没有执行,因为sum是临时变量,也就是说我除了这个函数之外,这个变量在别的地方没有使用过,为了能再函数中能够访问到sum,我们在int sum=0之前加一个__block,这样sum就变成了一个全局变量。在回调函数里面就可以使用了。

    View Code
    View Code

     
     
    分类: Objective-C
  • 相关阅读:
    VLC通过RTSP地址向IPC取流播放不了问题排查
    linux opt分区扩容操作案例
    win10远程桌面报错"出现身份验证错误"
    linux通过expect实现脚本自动交互
    oracle通过触发器记录登陆主机ip
    linux root密码忘记重置
    linux双网卡配置
    Tomcat报错合集
    UFT(QTP)中的Object Repository
    利用JAVA反射机制设计通用的DAO
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2843768.html
Copyright © 2020-2023  润新知