I mean, if I were absolutely certain I wasn't creating any autoreleased objects, then of course it wouldn't. My real concern is if there's anything else under the hood I don't understand. I have a background thread that calls a function. Must I always create an autorelease pool anyway?
- (void)someFuncOnABackgroundThread
{
//don't seem to need this. no leaks found
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//do something that doesn't create any objects, or only use alloc/init/release
NSString* str = [[NSString alloc] init];
[str release];
[pool drain];
}
Yep! You have to. You might be calling a function that's internally using autorelease pools, so you never really know if you're using or not any autorelease.
Good luck!
ultimately, it depends on the interfaces you're using in the implementation.
example 1
if you're interacting with Foundation or other objc types, you should. without question.
to answer specific to the example you've posted: definitely create one in this case -- NSString apis should assume an autorelease pool is in place.
example 2
if you're dealing entirely with apis in libc, there is no need.
bottom line
it can take a lot of time to understand where it's necessary (or not).
implementations can change, and they could introduce autoreleased objects.
you should guarantee a leak is never introduced, especially for such a simple reason.
it's a simple problem to overcome: if in doubt, create one.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With