美文网首页
关于Block内存泄露问题

关于Block内存泄露问题

作者: 木子小静 | 来源:发表于2016-07-05 16:32 被阅读279次

    考虑到block的创建问题网络上已经有很多文章,所以我这里就不做过多的阐述,有需要的盆友们可以自己去找一下哈~我这里只对block平时不注意的地方进行一下描述

    1.Block的定义

    void (^block)() = ^(){
        NSLog(@"block");
    };
    

    此block的类型:void(^)()

    Block的调用:block();

    2.Block的快速创建

    输入inlineBlock,回车即可出现

    // blockName:block的变量名
    returnType(^blockName)(parameterTypes) = ^(parameters) {
            statements
        };
    
    

    3.设置block的别名:typedef void(^myBlock)( int a);

    myBlock myBlock = ^(int a){
    NSLog(@"%d", a);
    };
    myBlock(2);

    4.Block的内存泄露

    block需要注意内存泄露的问题,在平时的使用中可以这样避免内存泄露的出现

    
    // 加在block前面
    typeof(self) __weak weakSelf = self;
    
    [ViewController returnBlock:^(BOOL finished) {
            if (finished) {
               
                // 之后要把此block里所有的self用weakSelf替换掉
                [weakSelf makeDate];
                [weakSelf theLineChange];
            }
        }];
    

    这样可以保证当前的这个block不存在内存泄露的问题,考虑到项目中的block很多地方都会用到,推荐将typeof(self) __weak weakSelf = self;这句话写成宏,用起来会方便很多

    5.关于block的其他方面

    Block作用:跟函数和方法很像,就是用来保存一段代码,等到恰当的时候再去使用
    Block使用范围,:用block传值,处理网络的时候经常使用block封装代码
    请求网络数据(延迟)先把展示到空间的代码先保存到block,等请求到数据的时候直接调用block

    相关文章

      网友评论

          本文标题:关于Block内存泄露问题

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