2015-05-27 107 views
2

這是執行self = [super init]的通用init模式;它應該分配自我指針在init中調用init,在self = [super init]之前調用

但我可以像這樣轉發init嗎?

- (id)initWithObject:(id)object { 
    return [self initWithObject:object scrollTo:nil]; 
} 

代碼工作,但不知道這是否是猶太...還怎麼能沒有自我工作= [超級初始化]

另外的移動,這樣行嗎?

- (id)initWithObject:(id)object { 
    self = [self initWithObject:object scrollTo:nil]; // NOT super 
    if (self) { 
     //... 
    } 
    return self; 
} 
+0

100%合法。當我有多個重載的構造函數時,我經常這樣做。 – Shai

+6

是的,但是您應該真正開始使用'instancetype'而不是'id'。 – picciano

回答

1

是的,這很好。我自己做了幾次沒有問題,我在Apple documentation中找到了一個代碼示例(向下滾動到「多個初始化器和指定的初始化程序」)。

+0

但是如何可以訪問自指針,爲什麼我們這樣做呢?self = [super init] –

+0

'self'已經被定義了,因爲你已經調用了'[Class alloc]'。 – Glorfindel

+0

那麼爲什麼約定然後自我= [超級初始化...] –

0

是的,當然可以!請注意,initWithObject:scrollTo必須返回一個有效的自我對象。

1

只有在返回操作符中調用指定的初始化程序或初始化程序時,它纔是絕對合法的。確保調用指定初始化程序的一種或另一種方式。

相關問題