block中的記憶體管理

2021-09-24 08:10:48 字數 527 閱讀 8853

1、a強引用b,b強引用a,b是a的全域性變數(這個時候會造成迴圈引用)

2、a強引用b,b強引用a,b是a的區域性變數(這個時候是不會造成迴圈引用的)

3、a強引用b,b中的block是乙個方法引數,b是a的全域性變數(這個時候不會造成迴圈引用)

4、a強引用b,b中的block是乙個屬性,b是a的全域性變數(這個時候會造成迴圈引用)

ps:3、4是在1、2的情況下新增了乙個block,是1、2的細分,所以如果是2的情況那麼不會造成迴圈引用問題,我們考慮在1的情況下。

分析:

2情況不會造成迴圈引用,是因為b是a的區域性變數,b在離開作用域後就被釋放了,不是在a的delloc方法中釋放的,所以不會造成迴圈引用

3情況不會造成迴圈引用,是因為block是b的乙個引數變數,在離開作用域後block就被釋放了,對a的引用也就消失了

block 記憶體管理

block簡介 copy一段 block作為c語言的擴充套件,並不是高新技術,和其他語言的閉包或lambda表示式是一回事。需要注意的是由於objective c在ios中不支援gc機制,使用block必須自己管理記憶體,而記憶體管理正是使用block坑最多的地方,錯誤的記憶體管理 要麼導致retu...

block的記憶體管理

block的記憶體管理 block變數是儲存在棧記憶體中的,所以宣告屬性時,應該使用copy屬性,將其複製到堆記憶體中。block在dealloc中釋放時,使用函式 block release 假如在customview中宣告了乙個block,在customviewcontroller中建立了乙個c...

self 在block中的記憶體管理

block對於其變數都會形成strong reference,對於self也會形成strong reference 而如果self本身對block也是 strong reference 的話,就會形成 strong reference 迴圈,造成記憶體洩露,為了防止這種情況發生,在block外部應該...