ARC下的block導致的迴圈引用問題解析

ytmaylover發表於2018-09-05

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物件洩露嗎?

    ARC下的block導致的迴圈引用問題解析

  • 問:方法中的block是怎麼回事呢?

    ARC下的block導致的迴圈引用問題解析

  • :MRC中的__block與ARC中的__weak有啥聯絡?

    • 在MRC中, __block 可以讓一個變數在 block 中進行修改而不會被這個 block retain.

    • 在ARC中, __weak 才能讓一個變數在 block 中不被這個block強引用.

    • __block是在MRC中使用的.

    • __weak是在ARC中使用的.

相關文章