iOS 簡單的 block 記憶體洩漏問題

2022-09-11 07:09:09 字數 616 閱讀 8104

注意 : block 用 copy 引用 

typedef int (^myblock)(int, int);

void play()

nslog(@"play ***");

int main(int argc, const char * ar**)

@autoreleasepool 

—————————————————————————————— 

記憶體洩漏問題:

block 裡面引用 self ,而self又強指標指著block。使self 不能被銷毀。

解決方法:

__weak typeof(self) selfvc = self;

定義乙個self的替身並用ruo指標引用著

————————————————————————————————

注意:在定義block時,會在block中建⽴立

當前區域性變數內容的副本(拷貝)後續再對該變數的數值進⾏行修改, 重點

不會影響block中的數值

如果需要在block中保持區域性變數的 

● 如果要修改block之外的區域性變數,需要使⽤用__block關鍵字  

__block bool flag = no; 

iOS的block記憶體管理

初始情況下 block本身 block修飾的變數以及在block內部使用的變數都是在棧裡的。block修飾的變數的位址會作為實參傳入block塊內部 暫時先這麼理解,實際比較複雜 block使用的外部變數被const拷貝到了block內部。也就是block使用的外部變數和這個外部變數本身沒有關係。c...

MRC環境下block記憶體洩漏問題

在以前,mrc環境下,使用block很可能會出現記憶體洩漏問題,並且在以往的面試中,一些接觸比較久的程式設計師都會喜歡問到這個問題,block記憶體洩漏的問題!下面,我來介紹一下,mrc下block記憶體洩漏的乙個問題 先隨意建立乙個dog類,並建立int型別age屬性,然後在main函式中,建立下...

iOS關於block的記憶體管理

person person person alloc init int a 20 person.age nsstring stringwithformat d a void myblock2 無引數無返回值的 a 呼叫block myblock 我們在block內部呼叫乙個區域性變數,當我們在呼叫b...