標籤:
----------------------MRC情況下Block記憶體分析----------------------------
1.如果在block中使用全域變數,他為了持有這個變數,會將對應的對象加一
2.使用__block,避免循環參考
3.在block中使用局部變數的時候,會將變數複製一份存放到常量區(可以使用,但是不可以更改)
4.在MRC環境下:block中訪問局部對象的時候,會將計數值加一
5.在MRC環境下:__block的作用:(1)修飾局部對象的時候,不會被block加一
(2)使用__block修飾局部變數的時候,可以在block中更改值
6.當Block訪問全域變數的時候,為了讓全域變數不銷毀,將屬性對應的對象reatin
7.當Block存取方法的時候,為了保證方法的存在,將對應的對象retain
----------------------ARC情況下Block記憶體分析---------------------------
1.在ARC情況下:__block的作用只有一個:修飾變數的時候,在block中可以修改
2. 在ARC情況下解決循環參考的方式:__weak
3.使用__weak,可以解決循環參考,但是不能訪問當前類中屬性
4.如果需要改變則可以作如下操作:
[button addBlockAction:^(UIButton *button) { //如果想訪問當前類的屬性,做如下操作 __strong SecondViewController *strongThis = weakThis;// _index = 30; //報錯// weakThis->_index = 30; //解決方式 strongThis -> _index = 30; [strongThis test]; [strongThis.navigationController popViewControllerAnimated:YES]; }];
iOS_block記憶體分析