美文网首页
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的简单内存分析

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