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 wanted to do was to store some object which outlives the thread. How can I do it?
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 wanted to do was to store some object which outlives the thread. How can I do it?
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.
-init
or copy
. –
Tenenbaum 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 !
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.
© 2022 - 2024 — McMap. All rights reserved.