【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。
