0

我在笔尖中有一个视图,它通过以下行链接到我的视图控制器中的一个属性:

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

它是 unsafe_unretained,因为我们的目标是 ios 4 设备,但使用的是 ARC。

我们正在崩溃,因为当我们试图显示 otherView 时,它正在被释放,我不太清楚为什么。我在 viewWillAppear 中设置了一个断点,如果我在调试器中执行“po otherView”,我会得到:

<UIView: 0x6fcc880; frame = (0 0; 320 460); autoresize = RM+BM; layer = <CALayer: 0x6fcc8b0>>

我在 viewWillAppear 方法的末尾检查了它,它也仍然存在。但是,如果我在 viewDidAppear 的开头放置一个断点,我会得到:

0x6fcc880 does not appear to point to a valid object.

谁能指出我正确的方向?如果我将属性声明更改为“强”,则不会发生此问题,并且我理解通过将其更改为强,我将保留它(并因此防止它被释放),但我不认为我应该需要这样做吗?

问候,尼克

4

1 回答 1

2

您需要在 xib 中的任何 topLevel 对象上具有保留属性 ( strong| )。retain

在此处输入图像描述

在上面的这个例子中,view1需要有一个保留的属性。view2不需要保留财产,但我通常只是将其保留为保留,因为它不会伤害任何东西。


为什么不需要保留?

view2不需要保留属性,因为它归您所有view1以及您拥有的任何引用are arbitrary references between objects that do not imply ownership.(Apple,资源编程指南)。self.view2 = nil但是拥有保留财产也没有什么坏处,只需确保致电viewDidUnload

于 2012-04-05T14:36:10.720 回答