• 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来修饰,用来告诉编译器这个局部变量有些特殊可以在代码中使用,这些变量在代码块中使用就是本来的变量。 
  • 相关阅读:
    [刘阳Java]_eayui-pagination分页组件_第5讲
    [刘阳Java]_easyui-draggable拖动组件_第4讲
    [刘阳Java]_easyui-panel组件入门级_第3讲
    [刘阳Java]_TortoiseSVN基础应用_第1讲
    [刘阳Java]_SpringMVC文件上传第2季_第11讲
    [刘阳Java]_Spring中IntrospectorCleanupListener的用途【补充】_第16讲
    使用fetch代替ajax请求 post传递方式
    react购物车demo
    react-redux异步数据操作
    redux模块化demo
  • 原文地址:https://www.cnblogs.com/ndyBlog/p/4422630.html
Copyright © 2020-2023  润新知