0

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

我想过这个:

NSString *myString = [[NSString alloc] initWithCString:"这行得通吗?"]; [thePool addObject:myString]; [另一个池 addObject:myString];

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

4

3 回答 3

6

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

于 2009-04-28T20:13:08.473 回答
2

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

于 2009-04-28T20:07:05.260 回答
-2

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

当一个对象被自动释放时——也就是说,当一个对象被发送一个自动释放消息或者当它作为参数传递给 addObject: 类方法时——它总是被放入堆栈顶部的自动释放池中。

另一方面,他们没有在 NSAutoreleasePool 类参考中提到它。所以我猜即使我在一个特定的对象上调用 addObject:,它也会进入自动释放池堆栈顶部的对象。其实我得试试看;)

于 2009-04-29T08:05:12.477 回答