self 在block中的記憶體管理

2021-06-29 08:07:26 字數 415 閱讀 8925

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

所以,當我們在自己類當中呼叫self指標時,我們也得注意下self的記憶體管理。   

用下面的方法宣告乙個區域性變數

__typeof (&*self) __weak weakself = self;  或者      __typeof (self) __weak weakself = self;

__typeof() 作用就是生成乙個型別,完整的意思就是定義個self所屬型別的 weak 區域性變數。

block中的記憶體管理

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的全域...

block中用到self要特別注意記憶體洩露問題

self強引用會使引用計數器加1,如果在dismissviewcontroller時,如 self dismissviewcontrolleranimated no completion nil 不呼叫dealloc方法,需要將self 轉為弱引用 weak typeof self selfvc s...

self 利用self在類封裝的方法中輸出物件屬性

class cat def eat self 哪乙個物件呼叫的方法,self就是哪乙個物件的引用 print s 愛吃魚 self.name def drink self print s 要喝水 self.name 建立貓物件 tom cat 可以使用 屬性名 利用賦值語句就可以了 tom.name...