iPhone - 有没有办法知道引用是否(仍然)有效?

时间:2011-08-04 20:17:40

标签: iphone validation memory-management reference

假设我使用参数中给出的对象分配实例var。我不知道这个对象是什么,所以我不想保留它。但是,我对该对象的引用在某些时候可能是无效的,例如,如果对象被释放,或者即将被释放(自动释放池)。因此,在我的类实例中,我是否可以知道我保留在实例变量中的引用是否可以使用而没有任何崩溃风险?

4 个答案:

答案 0 :(得分:2)

您应该保留它并在不再需要时将其释放。这正是保留的目的。

答案 1 :(得分:1)

这种方法非常危险。如果您的应用无法跟踪对象生命周期,则必须更改代码才能控制此对象。 无论如何回答你的问题:你可以保护你的实例变量,方法是将它保留在你的类中,然后在不再需要时释放它。所以你不需要做你要求的检查。

答案 2 :(得分:1)

Kris Van Bael是对的,无论你是否知道对象是什么,如果你想拥有它(如果你需要确保对象是活的),你必须保留它。在不需要时释放它,并将引用设置为NIL(为安全起见)。

但他们是一个例外

有时您不想拥有所有权,最常见的例子是委托。 您不希望保留您的委托,因为它可能已经保留了您,如果两个对象在dealloc方法中相互释放,您的应用程序将泄漏。

但是在这种情况下,你不应该关心被释放的委托:委托应该在你的dealloc方法中将你的“委托”属性设置为nil。

所以

  • 如果您对该对象拥有所有权:保留,别无选择!
  • 如果对象拥有您的所有权:分配,不要担心!

答案 3 :(得分:0)

您应该将任何已发布的引用设置为NIL并检查NIL