blog

Home / DeveloperSection / Blogs / Objective C : object creation method explanations

Objective C : object creation method explanations

Tarun Kumar 2927 06-Jul-2015

Previously we learn about Headers, interfaces, methods of Objective C : Objective C : Headers, Interfaces, Methods 


Creating a new object in Objective-C is usually a two-step process. First, memory has to be allocated for the object, then the object is initialized with proper values.

Alloc : alloc allocates a chunk of memory to hold the object, and returns the pointer.

MyClass* myObj = [MyClass alloc];

§ myObj cannot be used yet because its internal state is not correctly setup. So, don't write a code like this. 

Init : init sets up the initial condition of the object and returns it. 

-init { 
          self = [ super init ] ; // 1.
         If ( self ) { // 2.
              ....
         }
 return self ; // 3.
}

1. First, you need to call the superclass's init, to setup the superclass's instance variables, etc. That might return something not equal to the original self, so you need to assign what's returned to self.

2. If self is non-nil, it means the part controlled by the superclass is correctly initialized. Now you perform your initialization. All of the instance variables are set to nil (if it's object) and 0 if it's integer. You'll need to perform additional initial settings.

3. Return the set-up self. The returned self might be different from what's allocated! So, you need to assign the result of init to your variable.

Never split the call to alloc and init. Don't write:

MyClass* myObj = [MyClass alloc];
[myObj init];

because [myObj init] might return something else.

Don't try to get around this by writing:

MyClass* myObj = [MyClass alloc];
myObj=[myObj init];

because you will eventually forget to write the part myObj= in the second line.

Always write:

MyClass* myObj = [[MyClass alloc] init];

I also don't recommend writing:

MyClass* myObj = [MyClass new];

because it does not correctly call the initialization method: some classes does not accept a plain init. For example, NSView needs initWithFrame:, which can't be called with new. So, don't use new either.


Next, we will learn about : Objective-C Program Structure


Updated 24-Feb-2018

Leave Comment

Comments

Liked By