Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Designated initializer in Objective-C

Tags:

objective-c

Just to confirm is that the correct way to create designated initializer in Objective-C ?

Is this the correct way to init the ivars ?

Can you suggest me what to improve ?

Person.h

@interface Person : NSObject 


@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) int age;
@property (nonatomic, assign) NSString *sex;
@property (nonatomic, assign) int weight;

-(id)initWithName:(NSString *)name;
-(id)initWithName:(NSString *)name age:(int)age;
-(id)initWithName:(NSString *)name age:(int)age sex:(NSString *)s;
-(id)initWithName:(NSString *)name age:(int)age sex:(NSString *)s andWeight:(float)w;


@end

Person.m

@implementation Person

@synthesize name = _name;
@synthesize sex = _sex;
@synthesize age = _age;
@synthesize weight = _weight;

-(id)initWithName:(NSString *)name age:(int)age sex:(NSString *)s andWeight:(float)w
{
    if(self = [super init])
    {
        [self setName:name];
        [self setAge:age];
        [self setSex:s];
        [self setWeight:w];
    }
    return self;
}

-(id)initWithName:(NSString *)name age:(int)age sex:(NSString *)s
{
    return [self initWithName:name age:age sex:s andWeight:0];
}

-(id)initWithName:(NSString *)name age:(int)age
{
    return [self initWithName:name age:age sex:0];
}

-(id)initWithName:(NSString *)name
{
    return [self initWithName:name age:0];
}

-(id)init
{
    return [self initWithName:nil];
}

Thanks in advance !

like image 614
foho Avatar asked May 17 '26 04:05

foho


2 Answers

It is correct in my opinion. You can improve efficiency by calling to the main init method from any other one, so you don't chain calls, but I think there are not a big difference.

like image 143
Gabriel Avatar answered May 19 '26 18:05

Gabriel


Yeah, that's a typical pattern. The designated initializer has all of the parameters, and the simpler initializers fill in default values.

like image 31
NSResponder Avatar answered May 19 '26 17:05

NSResponder