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

WechatIMG362.jpeg
