iOS之ARC下的Block


ARC的特性

  ARC下,所有NSObject類型指針,

  1. 默認為__strong類型

  2. 可以顯示的指定為__weak類型,__weak類型指針在所指向對象銷毀后會自動置為nil

  3. __autorelesing類型用於inout參數類型

  ARC下,當一個函數返回一個NSObject指針時,編譯器會幫我們實現autorelease調用。例如:

  return pObject;

  編譯器會幫我們擴展為 return [pObject autorelease];

  ARC下,不能顯式release,可以使用將值賦為nil來讓編譯器為我們release。

ARC與Block

  Block的生命周期管理非常的微妙,與ARC混在一起后,更加復雜。

  當Block延stack向上(up)傳遞的時候,直接返回,編譯器會添加[[ copy] autorelease]代碼。

  當Block延stack向下傳遞給需要retain的容器的時候,需要顯式的調用[^{} copy]方法。

  在ARC下,__block修改的NSObject指針依然會被retain。

  在ARC下,一個block內引用一個對象的實例變量后,self會被retain,所以極易造成strong reference cycle,可以通過__weak指針來避免這種情形,因為ARC不會為__weak指針retain。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM