iOS中Block內(nèi)存管理分為三種:
- NSGloabBlock
- NSStackBlock
- NSMallocBlock
1: MRC中使用的__block可以表示若引用,ARC中要使用__weak修飾表示弱引用.
- NSGloabBlock:retain,copy,release 不會正價引用計數(shù)
- NSStackBlock:retain.release ,copy不會改變引用計數(shù),copy可以
- NSMallocBlock:位于堆區(qū),retain,release.引用計數(shù)改變.
注意:防止block循環(huán)引用,正確使用weak 和__block的修飾
驗證總結(jié)如下:
- 作用域內(nèi)定義的block 沒有引用外部變量的在全局區(qū) 引用了外部變量 在堆區(qū)
- block作為參數(shù) 如果引用了外部變量 是在棧區(qū),未引用還在全局區(qū)
- 全局區(qū)的block 不會被拷貝到堆區(qū),無論是外部指針引用 還是copy 操作 都沒有任何改變
-
只有棧區(qū)的block 如果被外部指針引用 或者copy 才會被拷貝到堆區(qū)
WechatIMG361.jpeg

WechatIMG362.jpeg
