blog

Home / DeveloperSection / Blogs / Objective-C : NSAutoreleasePool class

Objective-C : NSAutoreleasePool class

Tarun Kumar6026 10-Jul-2015

Previously we learn how to create Key Value pair using NSDisctionary : Objective-C : NSDictionary  class

                 

The NSAutoreleasePool class is used to support Cocoa’s reference-counted memory management system. An autorelease pool stores object that are sent a release message when the pool itself is drained. 

If you use Automatic Reference Counting (ARC), you cannot use autorelease pools directly. Instead, you use @autoreleasepool blocks. For example, in place of:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Code benefitting from a local autorelease pool.
[pool release];
you would write:
@autoreleasepool {
// Code benefitting from a local autorelease pool.
}


@autoreleasepool blocks are more efficient than using an instance of NSAutoreleasePool directly; you can also use them even if you do not use ARC.

 

In a reference-counted environment (as opposed to one which uses garbage collection), an NSAutoreleasePool object contains objects that have received an autorelease message and when drained it sends a release message to each of those objects. Thus, sending autorelease instead of release to an object extends the lifetime of that object at least until the pool itself is drained (it may be longer if the object is subsequently retained). An object can be put into the same pool several times, in which case it receives a release message for each time it was put into the pool.

 

The Application Kit creates an autorelease pool on the main thread at the beginning of every cycle of the event loop, and drains it at the end, thereby releasing any autoreleased objects generated while processing an event. If you use the Application Kit, you therefore typically don’t have to create your own pools. If your application creates a lot of temporary autoreleased objects within the event loop, however, it may be beneficial to create “local” autorelease pools to help to minimize the peak memory footprint.


Using Autorelease Pool Blocks


Autorelease pool blocks provide a mechanism whereby you can relinquish ownership of an object but avoid the possibility of it being deallocated immediately (such as when you return an object from a method). Typically, you don’t need to create your own autorelease pool blocks, but there are some situations in which either you must or it is beneficial to do so.

 

An autorelease pool block is marked using @autoreleasepool, as illustrated in the following example:

@autoreleasepool {
    // Code that creates autoreleased objects.
}

At the end of the autorelease pool block, objects that received an autorelease message within the block are sent a release message—an object receives a release message for each time it was sent an autorelease message within the block.


Updated 24-Feb-2018

Leave Comment

Comments

Liked By