block關鍵字解決block的迴圈引用

2021-07-14 06:12:30 字數 466 閱讀 6327

大家都知道,__weak宣告能解決迴圈應用,其實,__block也能解決迴圈引用!

怎麼解決的?先說一下__block的作用:用其修飾的外部變數,我們可以在blcok中才能修改該變數。

那為什麼用__block修飾的變數才能在block中修改呢?我們知道,區域性變數是存放在棧中的,所在的函式退出後棧也被清空。有被清空的危險,而__block的作用就是將該變數複製到堆上去,自己管理宣告週期!這樣就不存在清空的危險,block頁知道改外部變數是存在的,修改是安全的。

先看看__block是怎麼解決迴圈引用的:

__block myobject *myobject = self;

self.block = ^{

nslog(@"%@", myobject.ob1);

myobject = nil;

原因其實也是將self複製乙份到堆上,然後在block中用完後手動釋放掉!(myobject = nil)

block迴圈引用解決

inte ce viewcontroller property nonatomic,strong testnetworkblock testnetwork end implementation viewcontroller void viewdidload end inte ce testnetwo...

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...