iOS面试题:__block在arc和非arc下含义一样吗?

197 阅读1分钟

是不一样的。

在MRC中__block variable在block中使用是不会retain

但是ARC中__block则是会Retain的。

取而代之的是用__weak或是__unsafe_unretained来更精确的描述weak reference的目的

其中前者只能在iOS5之后可以使用,但是比较好 (该物件release之后,此pointer会自动设成nil)

而后者是ARC的环境下为了相容4.x的解決方案。

所以上面的范例中

 __block MyClass* temp = …;    // MRC環境下使用
 __weak MyClass* temp = …;    // ARC但只支援iOS5.0以上的版本
 __unsafe_retained MyClass* temp = …;  //ARC且可以相容4.x以後的版本