Назначенный инициализатор в Objective-C - PullRequest
3 голосов
/ 21 февраля 2012

Просто чтобы подтвердить, что правильный способ создания назначенного инициализатора в Objective-C?

Это правильный способ инициализации иваров?

Можете ли вы предложить мне, что улучшить?

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];
}

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

Это правильно на мой взгляд.Вы можете повысить эффективность, вызывая основной метод init из любого другого, чтобы не связывать вызовы, но я думаю, что нет большой разницы.

3 голосов
/ 21 февраля 2012

Да, это типичная картина. Назначенный инициализатор имеет все параметры, и более простые инициализаторы заполняют значения по умолчанию.

2 голосов
/ 21 февраля 2012

Я бы предложил вызывать -(id)initWithName:(NSString *)name age:(int)age sex:(NSString *)s andWeight:(float)w напрямую из каждого метода.Это может избежать нескольких дополнительных выполнений.

Apple рекомендует против с использованием методов доступа в init или dealloc.У вас есть переменные типа _name, и вы можете использовать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...