block要用copy修飾,還是用strong

2021-09-08 05:16:21 字數 325 閱讀 6978

棧區與堆區

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

使用retain也可以,但是block的retain行為預設是用copy的行為實現的,

因為block變數預設是宣告為棧變數的,為了能夠在block的宣告域外使用,所以要把block拷貝(copy)到堆,所以說為了block屬性宣告和實際的操作一致,最好宣告為copy。

block要用copy修飾,還是用strong

Block用copy來修飾

block使用copy是從mrc遺留下來的 傳統 在mrc中,方法內部的block是在棧區的,使用copy可以把它放到堆區.在arc中寫不寫都行 對於block使用copy還是strong效果是一樣的,但寫上copy也無傷大雅,還能時刻提醒我們 編譯器自動對block進行了copy操作。block在...

OC 為何用copy修飾block

簡單來說,block就像乙個函式指標,指向我們要使用的函式。就和函式呼叫一樣的,不管你在 寫了這個block,只要你把它放在了記憶體中 通過呼叫存在這個block的方 法或者是函式 不管放在棧中還是在堆中,還是在靜態區。只要他沒有被銷毀,你都可以通過你宣告的block調 用他。說到在類中宣告乙個bl...

Block為什麼用copy修飾

預設情況下,block是存檔在棧中,可能被隨時 通過copy操作可以使其在堆中保留乙份,相當於一直強引用著,因此如果block中用到self時,需要將其弱化,通過 weak或者 unsafe unretained.以下是示例 及其說明,讀者可以試著列印出不同情況下block的記憶體情況 viewco...