关于Block内存泄露问题

考虑到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内存泄露问题)