5

In iOS app development, we are using NSAutoreleasePool to relinquish ownership of objects at a later point in time.

But why can it be shared between different threads?

Why do we need to create a new autoreleasepool when I wanted to use a new thread?

EDIT:

As taskinoor mentioned my question was why this is designed in such a way that each thread should have a separate autoreleasepool.

4

4 回答 4

5

多线程自动释放池的设计挑战是何时耗尽它们。如果在对象仍在使用时耗尽池,那么您将崩溃。对于每个线程,很容易判断您何时处于运行循环之外,因此处于可以耗尽自动释放对象的位置。在多线程情况下,您的线程需要在它们的运行循环结束时同步,这样您就可以确保您处于一个安全的点来耗尽它们。以这种方式同步踏板是一个坏主意,它会产生大量空闲时间并减慢程序的速度。

于 2012-08-04T13:22:52.230 回答
2

每个线程都是不同的执行上下文——一个线程可能迟早退出,它们可能使用具有不同生命周期和内存管理需求的不同资源,因此每个线程应该独立管理。

于 2012-08-04T13:05:10.610 回答
1

因为他们是这样设计的。我想你的问题是为什么他们以这种方式设计。我不是 100% 肯定,但一个可能的原因可能是跨线程共享资源是有代价的。在对共享池的每次修改期间,每个线程都需要锁定解锁,这会降低性能。仅当需要共享时才应在多个线程之间共享资源,而自动释放池则不是这种情况。使用专用的自动释放池性能会更好。这可能是此设计决定的一个可能原因。

于 2012-08-04T13:06:44.557 回答
0

我不认为自动释放池在线程之间共享,根据Cocoa 中的苹果内存管理指南,每个线程都有自己的自动释放池堆栈

如果您不为您创建或分离的线程创建自动释放池,则自动释放功能不起作用,因此内存占用会增加

于 2012-08-04T13:04:05.727 回答