Block的循環(huán)引用:
block強(qiáng)引用self竹握,self強(qiáng)引用block抖格。解決方案:對(duì)self進(jìn)行弱引用冕房。
內(nèi)部修改外部變量:
block不允許修改外部變量的值生逸,這里的外部變量指的是棧中指針的內(nèi)存地址牢屋。__block的作用是只要觀察到變量被block使用,就將外部變量在棧中的內(nèi)存地址放到堆中槽袄。
三種block:
1烙无、NSGlobalBlock(全局):沒有訪問 auto變量 的block ,(.data區(qū))數(shù)據(jù)區(qū),一般存放全局變量, __NSGlobalBlock存放在這里
2遍尺、NSStackBlock(棧block):訪問了auto變量 的block 截酷,存放在棧區(qū)
3、NSMallocBlock(堆block):當(dāng)一個(gè)__NSStackBlock調(diào)用了copy操作,返回的就是一個(gè)__NSMallocBlock狮鸭,存放在堆區(qū)