Introduction
Most of the object
oriented languages have the Garbage Collector . All the objects are allocated
on the heap memory. The Garbage Collector is a thread that runs periodically to
check all the objects, which are no more being referenced from the program.
Garbage collector then de-allocates all these unreferenced objects on the Heap.
In this environment programmer does not need to worry about de-allocating the
objects explicitly.
In Objective – C we
don't have garbage collector. ( Note: Its available from iOS 5.0 only). So in
this environment we have to explicitly take care of allocation and deallocation
of all the objects in our program. And to manage it Objective C uses ‘reference
counting' algorithm as the memory management algorithm.
Reference Counting:
In this algorithm every object keeps track of it owners ( i.e. reference
variables from the program ) . Number of owners is represented by the property
retainCount declared in NSObject. If this retainCount goes to ‘0' the object
gets deallocated automatically. We never call dealloc method on any object
explicitly.
retain
method when called increases the retainCount by 1and release method when called
decreases the retainCount by 1.
Here I will explain
one more concept of Autorelease pool, which is like a container that holds the
autoreleased objects.
- This pool is
drained with every run-loop of the Application.
- When the pool gets drained, autorelease pool sends a release message to all the
objects it was holding.
Implement the following methods: retain, release, or autorelease
-(id)retain {
NSIncrementExtraRefCount(self);
return self;
}
-(void)release {
if(NSDecrementExtraRefCountWasZero(self)) {
NSDeallocateObject(self);
}
}
-(id)autorelease {
// Add the object to the autorelease pool
[NSAutoreleasePool addObject:self];
return self;
}