我一直在为我的对象创建自定义初始化程序,仅仅因为它感觉比以其他方式设置变量更好。在这些初始化程序中,我通常会设置对象的变量,然后将调用返回到主init。自定义对象初始化程序
因此,例如,在UIViewController子类我的代码看起来是这样的:
-(id)initWithValue:(int)val {
self.value = val;
return [self initWithNibName:nil bundle:nil];
}
其中value
是属于该视图控制器子类的整数,并且有比平常更多的价值。
但是,最近我开始设置自己的第一个,因为我认为self = [self init...]
将取代当前类的实例,因此我会失去自己的实例。 所以,我开始做:
-(id)initWithValue:(int)val {
self = [self initWithNibName:nil bundle:nil];
self.value = val;
return self;
}
然后我最近检查的原始版本,并意识到,一切都没有正常工作,该变化是不必要的。
所以,我的问题是这样的:
- 什么是[超级initWithNibName:束:]做的,这是造成它创建一个对象,但不会取代原来的对象?
- 是两个版本之一比另一个更好使用还是它们都是等价的?如果一个更好,应该使用哪个?
谢谢先进!
这就是我想,但我尝试设置值,然后做'自我=可能返回的零值自initWithNibName:束:]'然后打印出的价值观和他们是正确的。我假设自己不会总是被改变,但是按照自己的方式做事通常更安全。 – Jsdodgers 2013-03-19 06:29:33
另外,感谢关于'_value'的提示。只是为了确保我清楚这一点,使用'_value'时,'[self setValue:]'不会被调用,对吗?如果是这样,是不使用self.value的唯一原因还是另一个? – Jsdodgers 2013-03-19 06:31:34
价值属性在你的情况下,所以当综合使用像这样的标准代码... @synthesize value = _value; 您也可以使用[self setValue:]来获取值。 – 2013-03-19 06:35:05