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中使用的.
-