Block在ARC和非ARC中的使用

2021-07-09 03:40:23 字數 326 閱讀 2015

1

>block是事先封裝好的一段**快,在需要的時候呼叫block執行**

block底層是指向結構體的指標,編譯器會將block的內部**生成c語言對應的函式

2>block預設是存放在棧中的(開發人員不需要管理記憶體),儲存在棧中的block不會對引用的物件進行retain

3>非arc:對block進行copy操作,block會在堆記憶體中,並對引用物件做一次retain

4>用關鍵字__block修飾在堆記憶體中不會對引用物件retain

5>arc用

__weak

關鍵字或者__unsafe_unretain關鍵字

ARC和非ARC下使用Block屬性的問題

block屬性的宣告,首先需要用copy修飾符,因為只有copy後的block才會在堆中,棧中的block的生命週期是和棧繫結的。另乙個需要注意的問題是關於執行緒安全,在宣告block屬性時需要確認 在呼叫block時另乙個執行緒有沒有可能去修改block?這個問題,如果確定不會有這種情況發生的話,...

非ARC下返回Block

首先,對於沒有引用外部變數的block,無論在arc還是非arc下,型別都是nsglobalblock,這種型別的block可以理解成一種全域性的block,不需要考慮作用域問題。同時,對他進行copy或者retain操作也是無效的,比如這樣乙個返回block的函式 typedef int mybl...

block在ARC和MRC中的區別

block在arc和mrc中的宣告引用有些區別.block可以儲存在棧中,也可以在堆中 預設儲存在棧中,不需要管理記憶體 儲存在堆中的block會對block進行retain操作 mrc block在堆中時,不想對block進行retain操作,前面加 block arc 前面加 weak或 uns...