Does every thread need its own autorelease pool?

后端 未结 3 542
南旧
南旧 2020-12-17 04:46

Does every thread have to have its own pool? I am writing an iPhone app which uses threads. If I do not put a pool on a thread it complains abut leaking.

What I wan

相关标签:
3条回答
  • 2020-12-17 05:28

    If you don't need a runloop associated with your thread, you'll need to create an autorelease pool manually. I would suggest that for transferring ownership of an object to another thread, you make it explicit rather than trying to rely on autorelease; have some sort of "take ownership" method called on a longer-lived thread that retains it.

    0 讨论(0)
  • 2020-12-17 05:35

    No, every NSThread has its own NSRunLoop, but not its own NSAutoreleasePool. Thus you have to create one and if you are performing a large operation or a operation that needs a lot of time, you really should drain the pool from time to time to keep your memory footprint low.

    Object storage isn't bound to a thread at all, you can access every object from every thread you want, but it is possible that the accessor to the object isn't threadsafe and thus kills your app. However, this depends on your app and your code and not on threads.

    0 讨论(0)
  • 2020-12-17 05:38

    To precise a little bit what JustSid said : When autorelease is called on an object, the autoreleasepool associated with the current thread is used. So if no autoreleasepool is associated with your thread, the autorelease will not work, leading to memory leak.

    The final answer being : If your thread creates object(s) and count on the autorelease mechanism to release them, then you need to create an autoreleasepool for that thread !

    0 讨论(0)
提交回复
热议问题