2011-08-04 197 views
1

假设我用参数中给定的对象分配一个实例var。我不知道这个对象是什么,所以我不想保留它。但是,我对该对象的引用在某些时候可能是无效的,例如,如果对象被释放或即将释放(autorelease池)。所以,在我的类实例中,我可以知道引用我保存到一个实例变量可以使用没有任何崩溃的风险?iPhone - 有没有办法知道引用是否(仍然)有效?

回答

1

Kris Van Bael是对的,不管你是否知道对象是什么,如果你想拥有它(如果它是由你来确保对象是活着的),你必须保留它。当您不需要它时释放它,并将引用设置为NIL(用于安全性)。

但他们是个例外

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

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

所以

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

那正是我在寻找的东西。谢谢 ! – Oliver

0

您应该将任何发布的参考设置为NIL并检查NIL

+0

我认为奥利弗担心外部对象被释放到别的地方。 –

+0

@Kris Van Bael:是的,就是这样 – Oliver

2

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

1

这种方法非常危险。如果您的应用程序无法跟踪对象生命周期,那么您必须更改代码才能控制它。 无论如何回答你的问题:你可以通过额外保留你的实例变量来保护你的实例变量,然后在不再需要时释放它。所以你不需要做你想要的支票。

相关问题