zoukankan      html  css  js  c++  java
  • Block得简单使用

    #import <Foundation/Foundation.h>
    
    // 定义一个叫做MyBlock的类型
    // 利用MyBlock类型可以定义block变量
    // 利用MyBlock类型定义出来的变量, 存储的代码必须返回int, 必须接受2个int类型的参数
    typedef int (^myBlock)(int ,int);
    
    
    
    void test()
    {
        
        // 定义一个block计算两个整数的和
        int (^sumBlock)(int, int) = ^(int num1, int num2) {
            return num1 + num2;
        };
        
    //  int -返回值 - (int,int) 形参
        int (^myBlock1)(int,int) = ^(int num1,int num2)
        {
            NSLog(@"num + num --- %d",num1 + num2);
            
            return num1 + num2;
        };
        
        NSLog(@"slssl -- %d", myBlock1(10,20));
        
    }
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool
        {
    //     myBlock 类型 v1变量名
            myBlock v1  = ^(int n1, int n2)
            {
                return n1 + n2;
            };
            
            NSLog(@"n1 + n2 === %d",v1(10,1));
            
        }
        return 0;
    }
    一个Block的内部时可以引用自身作用域外的变量的,包括static变量,extern变量或自由变量(定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量auto,auto变量保存在stack中的。除了auto之外还存在register,static等存储修饰符),对于自由变量,在Block中只读的。在引入block的同时,还引入了一种特殊的__block关键字变量存储修饰符。 
    代码块本质上与变量一样,都在函数中声明然后使用,只不过一个变量中存储一个值,一个代码块存储一个函数体(一段代码);
    代码块的定义:有返回值,有参数,有变量名;
    __block关键字 修饰局部变量,使局部变量变得特殊,可以在block代码块中使用:
    把全局变量和局部变量作为参数传递到一个函数中,这个变量会copy一份传入到函数,函数中做的操作不会影响变量的值(根本就是两个东西)。
    把全局变量和局部变量作为参数传递到一个代码块中,局部变量必须要__block来修饰,用来告诉编译器这个局部变量有些特殊可以在代码中使用,这些变量在代码块中使用就是本来的变量。 
  • 相关阅读:
    发布国内首个无服务器容器服务,运维效率从未如此高效
    阿里云异构计算团队亮相英伟达2018 GTC大会
    阿里如何将“高峰前扩容、高峰后缩容”的梦想照进现实?
    迁移到 GRUB 2
    (11计科1班-孙鹏启)SHELL脚本—期末成绩统计
    硬盘分区的c盘在外圈还是内圈
    Linux内核设计的艺术(第2版)
    卸载,弹出,安全移除驱动器 的区别
    (11级计科2班-张文旭)关于LINUX连接网络问题
    安装Zend Guard Loader
  • 原文地址:https://www.cnblogs.com/ndyBlog/p/4422630.html
Copyright © 2011-2022 走看看