Skip to main content

Is an autorelease pool necessary if I"m not creating autoreleased objects?


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];
}


Source: Tips4all
Source: Tips4allSource: CCNA FINAL EXAM

Comments

  1. 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.

    ReplyDelete
  2. 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!

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?