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 !
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.
Yeah, that's a typical pattern. The designated initializer has all of the parameters, and the simpler initializers fill in default values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With