美文网首页iOS内存泄露
iOS Block 的简单介绍

iOS Block 的简单介绍

作者: 青葱烈马 | 来源:发表于2016-04-27 21:48 被阅读61次

Block 的定义:

@property (nonatomic,copy)void(^myBlock)(int age);

Block 定义中copy关键字的使用:

1>使用 copy 关键字是把 block 拷贝到堆中,而栈中的 block 的生命周期是和栈绑定的. 使用 copy 是有可能在 block 代码块里面是用到一些本地变量.

2>如果使用 copy属性,当其所在栈被释放的时候,这些本地变量将变得不可访问,一旦代码执行到block这段就会导致bad access;

3>在一个 block 中使用本地变量,如果声名用assign,代码执行到block内部就会出错.

4>在 Objective-C 语言中,一共有 3 种类型的 block:

         _NSConcreteGlobalBlock 全局的静态 block,不会访问任何外部变量。

         _NSConcreteStackBlock 保存在栈中的 block,当函数返回时会被销毁。   

         _NSConcreteMallocBlock 保存在堆中的 block,当引用计数为 0 时会被销毁。

5>在 block 中对于外部变量的应用:

         默认情况下,block 是将外部变量 copy 到其数据结构中来实现访问的,

         使用__block 修饰外部变量引用,block 是复制其引用地址来实现访问的.

block循环引用问题:

形成原因:

block引起的内存泄露问题,一般是由于在 block 中使用 self , self 持有当前对象, 当前对象持有 block, block 持有 self.  造成循环引用, 

解决办法:

把 block 引用的 self 修饰为弱引用.

__weak viewController* blockSelf = self;

相关文章

  • block 实用小例子

    本篇是简单介绍iOS 开发中block的使用(附demo): /* 声明一个block (返回类型)(^block...

  • iOS Block 的简单介绍

    Block 的定义: @property (nonatomic,copy)void(^myBlock)(int a...

  • iOS Objective-C Block底层原理

    iOS Objective-C Block底层原理 在上一篇文章中我们对Block做了简单的介绍,下面我们通过这篇...

  • Block-介绍

    Block简单介绍首先Block是iOS中比较特殊的一种数据类型Block是苹果官方比较推荐使用的数据类型,应用也...

  • Block 初见

    Block 初见 介绍 iOS block 的相关知识 目录 Block 背景知识 Block 使用方式 Bloc...

  • 2021-06-07

    IOS block 简单的可以认为是NSObject 对象(superclass:NSBlock) block就是...

  • ios block使用

    iOS Block的使用一 .最简单的block使用******使用block的三个步骤:1.定义block变量 ...

  • Block简单介绍

    1:什么是block?block其实就是一个代码块,把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用。...

  • iOS block介绍

    1. 简介 block是将函数及其上下文封装起来的对象。(引用别人的) 定义一个简单的block,在xcode中输...

  • block的使用和注意

    iOS学习-(1)block的使用和注意 本文简介 本文主要介绍1.block的基本使用 ...

网友评论

    本文标题:iOS Block 的简单介绍

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