ARC下的block导致的循环引用问题解析

1.在ARC下面使用block,无论怎样,你都需要注意这几点:

  • 外部对象进入block,请使用__weak修饰后再进入到block中

  • 不要在block中初始化对象,请在block的外面初始化对象后再进入到block中去

  • 无论该block是不是copy的,请都当做copy的block来处理

  • 传入到堆区block中的对象会被强引用

2.Block的类型与内存管理

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

    • NSGlobalBlock:类似函数,位于text段;
    • NSStackBlock:位于栈内存,函数返回后Block将无效;
    • NSMallocBlock:位于堆内存。
  • 此处我们可以得知,在处理对象时,block会malloc的.

  • :这种block会导致_model对象泄露吗?

  • 问:方法中的block是怎么回事呢?

  • :MRC中的__block与ARC中的__weak有啥联系?

    • 在MRC中, __block 可以让一个变量在 block 中进行修改而不会被这个 block retain.

    • 在ARC中, __weak 才能让一个变量在 block 中不被这个block强引用.

    • __block是在MRC中使用的.

    • __weak是在ARC中使用的.

转载于:https://juejin.im/post/5b8f801c6fb9a05cdb100ff9

你可能感兴趣的:(内存管理)