zoukankan      html  css  js  c++  java
  • 新浪微博客户端(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();
        
    }
  • 相关阅读:
    Centos 配置网易YUM源
    JDK 变量配置
    redis如何解决key冲突?
    大数据技术(1)流式计算与Storm
    20151211小问题
    返回顶部
    20151210小问题2
    20151210小问题
    20151209小问题
    前端程序员的自我修养
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6095499.html
Copyright © 2011-2022 走看看