block在arc和mrc中的宣告引用有些區別.
/**block可以儲存在棧中,也可以在堆中
預設儲存在棧中,不需要管理記憶體
儲存在堆中的block會對block進行retain操作 */
//(mrc)block在堆中時,不想對block進行retain操作,前面加__block
//(arc)前面加__weak或__unsafe_unretained
//__weak和__unsafe_unretained的區別:__weak則在釋放時會對物件賦值nil,後者不會
//block_copy使棧中的block轉移到堆中,並對block會引用的物件進行retain操作
//避免block引用的物件進行retain操作,在引用物件宣告時前面加__block
block 的ARC和MRC中的區別
block屬性的宣告,首先需要用copy修飾符,因為只有copy後的block才會在堆中,棧中的block的生命週期是和棧繫結的,可以參考之前的文章 ios 非arc下返回block 另乙個需要注意的問題是關於執行緒安全,在宣告block屬性時需要確認 在呼叫block時另乙個執行緒有沒有可能去修改...
ARC和MRC下Block的使用注意
1.是一段 塊,只在被呼叫的時候執行 類似於方法和函式 2.是一種資料型別 類似於 int nsstring 3.可以定義成臨時變數 4.可以當做引數傳遞 5.可以定義成屬性 6.是一種匿名函式 重要,只有函式體,沒有函式名 7.是乙個指向函式的指標 乙個指標物件,block的名字就是指標的位址 8...
Block在ARC和非ARC中的使用
1 block是事先封裝好的一段 快,在需要的時候呼叫block執行 block底層是指向結構體的指標,編譯器會將block的內部 生成c語言對應的函式 2 block預設是存放在棧中的 開發人員不需要管理記憶體 儲存在棧中的block不會對引用的物件進行retain 3 非arc 對block進行...