2012-11-09 42 views
0

永遠不要初始化一個對象,不要重新指派任何指向該對象的指針。作爲一個例子,不這樣做:ObjC-爲什麼分離實現[alloc]和[init]方法時不正確?

NSObject *someObject = [NSObject alloc]; 
[someObject init]; 

如果調用初始化返回一些其他的對象,你會留下一個指針,最初被分配,但從來沒有初始化的對象。

其實,這是蘋果的ObjC文檔中的例子,但我不與此相當明確,那就是爲什麼NSObject *someObject = [[NSObject alloc] init]可以答應回到我們剛纔所需要的對象,而NSObject *someObject = [NSObject alloc]; [someObject init];不能?

+0

每當我需要做[[.... alloc] init],我更喜歡[...新]。保存輸入和代碼看起來更小。如果你需要做initWith ...那麼別無選擇。 –

+0

en,[[... alloc] init]等價於[... new],如果您只需要一個僅用於init的對象,如果存在任何實例變量值,則將其設置爲0。 – abyn

回答

3

只是因爲-init可能返回與someObject不同的東西。在你的例子中,你必須重新分配指針到-init的結果。

+0

但是何時以及如何返回與someObject不同的東西?以及如何重新分配的指針,在該分配init分離版本的-init的結果? – abyn

+0

我已經知道這個問題的答案,多麼愚蠢的問題...... – abyn

相關問題