我一直在爲我的對象創建自定義初始化程序,僅僅因爲它感覺比以其他方式設置變量更好。在這些初始化程序中,我通常會設置對象的變量,然後將調用返回到主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