iOS Block自身的記憶體問題

2021-06-26 06:31:12 字數 659 閱讀 6463

block本身是像物件一樣可以retain,和release。但是,block在建立的時候,它的記憶體是分配在棧(stack)上,而不是在堆(heap)上。他本身的作於域是屬於建立時候的作用域,一旦在建立時候的作用域外面呼叫block將導致程式崩潰。比如下面的例子。  

我在view did load中建立了乙個block:

- (void)viewdidload

; }

並且在乙個按鈕的事件中呼叫了這個block:

- (ibaction)testdidclick:(id)sender

此時我按了按鈕之後就會導致程式崩潰,解決這個問題的方法就是在建立完block的時候需要呼叫copy的方法。copy會把block從棧上移動到堆上,那麼就可以在其他地方使用這個block了~

修改**如下:

_block = ^();

_block = [_block copy];

同理,特別需要注意的地方就是在把block放到集合類當中去的時候,如果直接把生成的block放入到集合類中,是無法在其他地方使用block,必須要對block進行copy。不過**看上去相對奇怪一些:

[array addobject:[[^ copy] autorelease]];

iOS Block自身的記憶體問題

block本身是像物件一樣可以retain,和release。但是,block在建立的時候,它的記憶體是分配在棧 stack 上,而不是在堆 heap 上。他本身的作於域是屬於建立時候的作用域,一旦在建立時候的作用域外面呼叫block將導致程式崩潰。比如下面的例子。我在view did load中建...

IOS Block迴圈引用的記憶體洩漏問題

ios 在mrc 非arc 記憶體管理方式下,中如果block呼叫了self的方法,那self的引用計數會被block 1,如果處理不當會當值記憶體洩漏。implementation isschartlineviewcontroller void dealloc here need to optim...

ios block迴圈引用問題

ios開發中,開了arc模式,系統自動管理記憶體,如果程式中用到了block就要注意迴圈引用帶來的記憶體洩露問題了 這幾天遇到乙個問題,正常頁面dismiss的時候是要呼叫dealloc方法的,但是我的程式就是不呼叫,研究了好久終於找到了問題出在 了 起初的 如下 void getmyrelated...