美文网首页
iOS中block的简单内存分析

iOS中block的简单内存分析

作者: 蚂蚁牙齿不黑 | 来源:发表于2016-03-23 13:12 被阅读101次

block的声明与实现   形式如下  第一种形式

block的声明与实现

第二种形式  先定义个block类型,大多数情况下也采用这种形式

在block中访问外部变量

如果你在一个block块中仅仅访问对象,而不是对他进行修改操作,是没有任何问题的,但是修改的话就会报错

访问外部变量会报错

根据猜测,在block生成的同时会对内部使用的变量copy一份,可通过打印变量地址得道验证

改变了内存地址

如果要在block内部使用外部变量,需要在变量前用__block来修饰,那么__block做了什么?通过如下代码不难发现__block只做了一件事

如果用__block修饰后  block内部会使用原先的那份内存  否则就会使用拷贝后的内存   原先的那块内存虽然值改变了  但并不影响内部拷贝后内存的值

一点一点扩展:

由此我们可以推测,如果block中使用的是指针,我们可以直接修改,如果不是的话需要用__block

block循环引用:

先来一个循环引用的案例 (编译器已经警告提示了,会造成内存泄漏)

而下面这段代码就不会有警告

因为self并为对GCD的这段block代码产生强引用

相关文章

  • iOS中block的简单内存分析

    block的声明与实现 形式如下 第一种形式 第二种形式 先定义个block类型,大多数情况下也采用这种形式 在...

  • Block内存管理实例分析

    Block内存管理实例分析 Block内存管理实例分析

  • iOS 栈和堆总结

    转载自 :大神博客iOS程序中的内存分配iOS 堆和栈的区别block与propertyiOS中__block 关...

  • iOS内存分析上-图片加载内存分析

    iOS内存分析上-图片加载内存分析 iOS内存分析上-图片加载内存分析

  • 关于Block的碎片整理

    iOS中Block内存管理分为三种: NSGloabBlock NSStackBlock NSMallocBloc...

  • OC关于block探究

    Block分类 主要是根据内存管理进行分类 iOS中.m文件重写为C++文件 使用的命令行 一、Block根据内存...

  • Block探索

    Block内存关系Block经典问题循环引用&解决Block底层分析Block底层HooK 程序占用内存分类 栈区...

  • OC--Block总结

    参考 Block编译代码解读:block没那么难(一、二、三)iOS进阶——iOS(Objective-C) 内存...

  • block 实用小例子

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

  • block循环引用问题

    在讲block的循环引用问题之前,我们需要先了解一下iOS的内存管理机制和block的基本知识。 iOS的内存管理...

网友评论

      本文标题:iOS中block的简单内存分析

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