是否可以将对象添加到特定的自动释放池?

时间:2009-04-28 19:59:00

标签: iphone cocoa-touch uikit autorelease

在文档中有一个NSAutoreleasePool的addObject:方法。

我想到了这个:

NSString * myString = [[NSString alloc] initWithCString:“这有用吗?”]; [thePool addObject:myString]; [anotherPool addObject:myString];

这可能吗?我总是读到我只能在自动释放池堆栈的最顶层添加对象。

3 个答案:

答案 0 :(得分:6)

是的,你可以。但你永远不应该。绝对没有理由这样做。

答案 1 :(得分:2)

您正在做的事情是可能的,但可能会在运行时导致异常,因为在释放后myString将被发送-release消息(假设最后一个剩余引用是第一个池)。通常,作为-[NSAutoreleasePool addObject:] documentation状态,您不应手动将对象添加到自动释放池,而应通过在该对象上调用-autorelease。这会将对象放在当前线程的活动自动释放池中(每个线程都有自己的自动释放池)。

答案 2 :(得分:-2)

由于Apple的这一点,我现在有点困惑:

  

当一个对象被自动释放时 - 那个   是,当一个对象被发送   自动发布消息或何时消息   作为参数传递给了   addObject:class方法 - 总是如此   放在顶部的自动释放池中   堆栈。

另一方面,他们没有在NSAutoreleasePool类参考中提及它。所以我想即使我在一个特定的一个上调用addObject:然后它将进入Autorelease Pool Stack顶部的那个。实际上我必须尝试一下;)