• 新浪微博客户端(34)-block的细节与本质


    main.m

    #import <Foundation/Foundation.h>
    
    
    void test4();
    
    
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            test4();
            
        }
        return 0;
    }
    
    
    
    // 普通的局部变量,block只会引用它初始的值(block定义那一刻),不能跟踪变量的改变
    void test1() {
    
    
        int i = 10;
        
        void (^next)() = ^{
            
            printf("当前i的值是:%d
    ",i); // 输出为10
        
        };
        
        i = 20;
        
        next();
    
    }
    
    
    // 被static修饰的局部变量,block内部会一直引用
    void test2() {
        
        
        static int i = 10;
        
        /**
         *  block 的定义语法
         *  void 是返回值
         *  (^next) 定义一个block,block的名字是next
         *  (int) 代表该block可以接收一个参数
         */
        void (^next)(int) = ^(int i){
            
            printf("当前i的值是:%d
    ",i); // 输出为20
            
        };
        
        i = 20;
        
        next(5);
        
    }
    
    
    // 被__block修饰的局部变量,block内部会一直引用
    void test3() {
        
        
        __block int i = 10;
        
        void (^next)() = ^{
            
            printf("当前i的值是:%d
    ",i); // 输出为20
            
        };
        
        i = 20;
        
        next();
        
    }
    
    
    
    int j = 10;
    
    // 全局变量,block会一直引用
    void test4() {
        
        void (^next)() = ^{
            
            printf("当前i的值是:%d
    ",j); // 输出为20
            
        };
        
        j = 20;
        
        next();
        
    }
  • 相关阅读:
    += 和 =+
    Ubuntu分区方案(菜鸟方案、常用方案和进阶方案)
    Apache ab测试工具使用方法(无参、get传参、post传参)(转)
    硬盘安装ubuntu遇到的问题
    Promise
    A Kill Cord for your Laptop
    python 2week
    PDCA循环原理
    python自学基础1week
    14链表中倒数第k个结点
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6095499.html
Copyright © 2020-2023  润新知