关于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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...
    Coder_JMicheal阅读 832评论 2 1
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,468评论 2 26
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,884评论 0 23
  • 转自李峰峰博客 一、概述 闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」...
    Joshua520阅读 1,119评论 0 0
  • 简述 一句话搞懂block:可以理解为,block是对上下文代码段的打包,然后在适当的时机执行。 block长什么...
    Allan_野草阅读 2,252评论 0 25

友情链接更多精彩内容