As I mentioned in my previous blog post that Objective-C has no such thing as constructors. We use the native non-instance method or what we call "static" method to allocate a new instance. That method is called alloc.
MyClass* myObj = [MyClass alloc]
The above code just creates an object in a fashion similar to having no constructors defined in our C++ or C# class.
But consider the following code in C++.
class Circle
{
private int m_radius;
public Circle()
{
m_radius = 10; // C++ folks can also use the "initializer list" for this assignment
}
}
If we want to implement the same logic in Objective-C, we are going to have to define something what most Obj-C developers call "initializers"
Initializers are nothing but methods that may take arguments and meant to be called right after allocation of a new object. So we could do the following in Objective-C. Lets do a "default constructor" in this post. I will make another post for parameter-ized constructor
Circle.h file
#import <foundation/foundation.h>
@interface Circle : NSObject {
NSInteger m_radius;
}
- (id) init;
@end
Circle.m file
@implementation Circle
- (id) init
{
self = [super init]; // calling base class's init in this case NSObject's init
if (self) { // checking to see if an object has been returned by NSObject's init
self.m_radius = 10; // set the default value to 10
}
return self; // In order for it to act like a constructor, it should return the object
}
@end
And this is how we create an object using the initializer defined above
Circle* circleObj = [[Circle alloc] init];
By the way, 'super' is a Java term for base class too. Somebody gets a title of 'copy-cat' here.
That's all folks for this post. Please let me know your comments in the comment box below if you have any.