ios block 循环引用

根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlock。

  • NSGlobalBlock:类似函数,位于text段;
  • NSStackBlock:位于栈内存,函数返回后Block将无效;
  • NSMallocBlock:位于堆内存

block 与对象,对象与对象,关于引用次数:

一个思路:就是 在用 block的时候,block 里面使用到的变量,有没有 增加引用计数,如果 增加了,就可能 最后 垃圾收集器 引用计数 减少了,但是 还是 大于1的,因此就 造成了内存泄露,然后 就不调用 dealloc了,因此 在这个方法里面写的 其它资源释放的方法也是没有效的。

对于引用的 对象,变量,设置成:

1,__block(用ARC 设置成__weak)

2,__unsafe_unretained

添加标记是为了告诉系统,这个对象 被block强奸过,这样就解决了,

只是搞不清楚,使用上面的:是block把用到的对象拷贝到堆上,没有增加引用计数,之前是多少还是多少

 

posted @ 2014-07-30 13:32  路在脚下,  阅读(572)  评论(0编辑  收藏  举报