iOS Block

作者: 目染江夏 | 来源:发表于2019-05-08 15:21 被阅读0次
        //基本数据类型局部变量 (只获取其值;__block 对截获变量进行赋值操作需要添加)
       __block int multiplier = 10;
        //对象类型局部变量 (连同所有权修饰符一同截获)
        __unsafe_unretained id unsafe_obj = nil;
        __strong id strong_obj = nil;
        //局部静态变量  (以指针形式截获局部静态变量)
        static int static_var = 3;
        //全局变量 、静态全局变量 不截获 直接使用
    
        int(^Block)(int) = ^int(int num){
            multiplier = 2;
            static_var = 4;
            NSLog(@"static_var : %d",static_var);
            return num * multiplier;
        };
        NSLog(@"%d",Block(2));
        multiplier = 4;
    
     __block 对截获变量进行赋值操作需要添加
     需要添加: 基本数据类型、 对象类型
     不需要添加 :静态局部变量、全局变量、静态全局变量
     __block 修饰的变量变成了对象
     
     __forwarding
     不论存在任何内存位置  都可以顺利访问同一个__block 变量
     
     循环引用
    
       //1,自循环
    
         {
         _array = @[@"block"];
        //解决方法
        //__weak NSArray *weakArr = _array;(弱引用)
         _strBlock = ^NSString*(NSString* num){
         return [NSSting stingWithFormat:@"%@%@",num,_array[0]];
         }
         _strBlock("hello");
         }
    
     //2,MRC下不会产生循环引用,ARC下会产生循环引用,引起内存泄露
    
         {
         __block MCBlock *blockSelf = self;
         
         _blk = ^int(int num){
        //ARC下解决方法
        // int result =  num * blockSelf.var;
        //blockSelf = nil;(block 长时间不使用还是会造成虚幻引用)
        // return result;
         return num * blockSelf.var;
         };
         _blk(3)
         }
    

    相关文章

      网友评论

          本文标题:iOS Block

          本文链接:https://www.haomeiwen.com/subject/elamoqtx.html