2013-06-12 38 views
0

我打算在iOS中使用参数在init方法中调用默认的init方法。像这样:我打算在参数初始化方法中调用默认的init方法

-(id)init{ 
    self = [super init]; 
    if (self) { 
     Office =   [[NSString alloc]init]; 
    } 
    return self; 
} 

-(id)initWithOffice:(NSString*)office{ 
    self = [self init]; 
    if (self) { 
     self.Office = itemDescription; 
    } 
    return self; 
} 

我的问题是一个很好的做法,应该做什么? 我欣赏提前你的回应,

+1

我看到这里没有问题。 – 2013-06-12 12:21:10

+0

@ H2CO3,请参阅编辑。 –

回答

5

,将工作,但我宁愿以下,因为它不分配一个空字符串,只与初始化字符串来代替:

-(id)initWithOffice:(NSString*)office{ 
    self = [super init]; // Not [self init] 
    if (self) { 
     Office = office; // OK if using ARC 
    } 
    return self; 
} 

第一方法不会产生很大的意义;我认为简单地将Office作为nil更好(NSString对象是不可变的)。正如@H2CO3指出的那样,initWithOffice方法变成指定的初始化程序用于该类,并且所有其他init方法应该使用它来初始化该对象。考虑到这一点,第一init方法应该是:

-(id)init{ 
    return [self initWithOffice:nil]; 
} 
+0

我相信它会起作用,但为什么你会喜欢它? –

+0

@ ZainSyed更新。 – trojanfoe

+1

@trojanfoe我想你应该提到,OP得到了逻辑的另一种方式。通常'init'是谁应该用一些有意义的默认参数调用指定的初始化器。 – 2013-06-12 12:33:58

1

创建方法开始initWith是看到什么值将被传递。它可以帮助您提醒应该在方法中发送和分配哪些值。考虑你初始化视图时有4个变量要初始化。最好保留一个单独的initWith方法,以便可以初始化您的视图和您自定义的其他变量。

+0

我打算看看是否调用另一个初始值设定项(默认情况下是一个很好的做法)? –

+0

在你的示例中,如果你要使用默认和自定义的inits,代码应该是这样的; - (id)init {self = [super init]; if(self){ // } return self; (id)initWithOffice:(NSString *)office { self.Office = itemDescription; } – Engnyl

+0

你能描述一下这个区别吗?对我来说init方法是假设获取内存。 –

0

我想你应该提高你反对assignning逻辑,这样的...

-(id)initWithOffice:(NSString*)office{ 
    self = [self init]; 
    if (self) { 
     self.Office = [[NSString alloc] initWithString:office]; //Purpose is that //the office object can only be released by the self, non other classes (The owner //of the variable should be self). 
    } 
    return self; 
} 
相关问题