Block笔记

1. block访问外部变量


/**
 *  block内部访问外部值的问题
 *  block内部不允许修改外部变量值
 */
void test(){

    int m = 10;
    
    NSLog(@"1:m = %d",m);   //10
    NSLog(@"2:m addr = %p",&m);         //栈区
    //        NSString *str = @"abc";
    //        NSLog(@"str = %p",str);
    
    //定义变量,并且赋值
    //当定义block的时候,block会把外部变量以const的方式复制一份
    //存放到block的所在的内存中
    void (^myBlock)()=^{
        //m的值不能被修改
        //m = 100;
        
        NSLog(@"5:m addr = %p",&m);     //堆区
        //可以访问m的值
        NSLog(@"3:in block m = %d",m);  // ?
        
    };
    
    NSLog(@"4:m addr = %p",&m); //栈区
    //使用
    myBlock();
    
    
    // 1 2 4 5 3

}

-(void)test2(){

  __block int m = 10;
        NSLog(@"1:m add  = %p",&m);   //栈区地址
 
        //__block 不再以const的方式拷贝
        void (^myBlock)()=^{
            //m的值不能被修改
            m = 100;
//            n = 10;
//            int m = 100;
            NSLog(@"5:m addr = %p",&m);     //堆区
            //可以访问m的值
            NSLog(@"3:in block m = %d",m);  // ?
        
        };
        myBlock();
        
        NSLog(@"6:m = %d",m);  // ?
        NSLog(@"7:m addr = %p",&m);

}

inlineBlock
快捷键

  1. 善于抽取工具类方法
    代码放在它应该存在的地方

你可能感兴趣的:(Block笔记)