2011-08-25 55 views
1

使用变量参数编号重载init方法的正确方法是什么?我在做它:使用变量参数编号重载初始化参数

- (id)initWithInt:(int)a 
{ 
    return [self initWithInt:a andString:nil]; 
} 


-(id)initWithInt:(int)a andString:(NSString*)str 
{ 
    self = [super init]; 
    if (self) { 
     NSLog(@"%@ %i",str,a); 
    } 

    return self; 
} 

它的工作原理,但return [self initWithInt:a andString:nil];看起来不正确,我(还有目前没有自我,对吧?)

回答

3

不,这是完全合法的。 Self已经设置好了,重新指派自我的习惯用法是针对两种不同的边缘情况(初始化失败,初始化器想要返回不同的实例,然后是分配的实例等)。

+2

只是为了澄清“目前没有自我”声明,“self”确实存在,因为它是'alloc'返回的对象。但是,不能保证'self'在初始化之前处于有效状态,所以期望调用其他方法会崩溃/失败,并且期望所有的ivars都将为零内存。 –