如何在ARC使用“弱”?

时间:2012-08-09 12:45:06

标签: objective-c automatic-ref-counting weak

我用:

@property(nonatomic, weak) IBOutlet UIView *videoView;

有警告:

  

属性'videoView'需要定义方法'videoView' - 使用@synthesize,@ dynamic或在此类实现中提供方法实现

然后我尝试:

@synthesize videoView;

出现错误:

  

当前部署目标不支持自动__weak引用。

另一个问题:

@property(nonatomic, unsafe_unretained) IBOutlet UIView *videoView;

- (void)dealloc {
    videoView = nil;
}

我可以这样使用吗?

2 个答案:

答案 0 :(得分:3)

  

当前部署目标不支持自动__weak引用。

问题是iOS 4.x不支持自动清零弱引用。这意味着,当一个弱引用的对象被销毁时,弱引用会继续指向它,如果使用它可能会导致崩溃。

iOS 5及更高版本支持自动归零弱引用。要利用它们并清除上面的警告,请将最低iOS目标提高到5.0,然后使用5.0 SDK。

答案 1 :(得分:1)

您的部署目标是什么?您需要至少拥有iOS4才能拥有weak引用,并且您需要使用带有Xcode4.4或更高版本的LLVM4才能声明您的@property变量,而不必提供{@synthesize变量1}}。

至于第二个问题 - 你想做什么。如果你只是试图在dealloc上安全地将变量设置为nil,那么它是可以的,因为你声明它是unsafe_unretained你不拥有它所以你不应该释放它。