2009-04-28 64 views
0

在文档中有NSAutoreleasePool的addObject:方法。是否可以将对象添加到特定的自动释放池?

我想到这个问题:

的NSString * myString的= [[NSString的页头]方法initWithCString: “这是否工作”]; [thePool addObject:myString]; [anotherPool addObject:myString];

这可能吗?我总是读到,我只能将对象添加到autorelease池堆栈的最顶层。

+1

看来你有很多与内存管理有关的问题。我认为这会大大有利于您仔细阅读“内存管理编程指南”(http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html)。所有你的问题的答案都在那里。祝你好运。 – 2009-04-28 20:08:33

+0

我读过两遍。但不幸的是,我不明白他们试图解释他们的方式。 – Thanks 2009-04-29 07:56:31

回答

2

你在做什么是可能的,但可能会在运行时导致异常,因为myString将在释放后发送-release消息(假定最后一个引用是由第一个池引用)。通常,如-[NSAutoreleasePool addObject:]documentation所述,您不应该手动将对象添加到自动释放池,而是通过在该对象上调用-autorelease。这会将对象置于当前线程的活动自动释放池中(每个线程都有自己的自动释放池)。

6

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

-2

我现在感到有点困惑,因为这从苹果:

当一个对象被自动释放 - 即 是,当一个对象被发送的 自动释放消息或当它 为传递 addObject:class方法的参数 - 始终将 放置在栈顶部的顶部 的autorelease池中。

另一方面,他们没有在NSAutoreleasePool类参考中提到它。所以我猜想,即使当我调用addObject:在特定的一个上时,它也会进入Autorelease Pool Stack之上。其实我必须尝试一下;)

相关问题