2012-04-07 44 views
1

目標C規格(蘋果)第49頁指出 聲明一個實例變量,必須提供每個類的init方法來初始化它們iOS的 - 爲什麼是init必要和其他的init問題

我的問題 - 爲什麼這是必要的?不是NSObject初始化一個實例的iVar?

應該認爲init是一個構造函數。

是否必須將init命名爲init?我可以做 id anObject = [[SomeClass alloc] foo];

Muchas gracias。

回答

0

init方法與構造函數類似,但不會自動調用。你必須自己調用它。

調用它「init」是一個常見的約定,但不是一個要求。

0

默認initNSObject不會觸及你的實例變量。 spec中的聲明意味着如果您使用類似NSString *strNSDate *d的對象作爲類的實例變量,則需要對其進行初始化。這通常發生在init,儘管你可以用其他方法初始化它們。

是的,你可以有[[SomeClass alloc] foo]返回一個對象。

+0

'-foo'不會是一個靜態方法,如果'alloc'返回該類的一個實例... – 2012-04-07 15:39:06

+0

@ RichardJ.RossIII啊,是的,謝謝你的解釋。 – 2012-04-07 15:40:31

0

類通常不知道他們的子類的內部和NSObject是沒有不同的那種方式。

alloc + init非常像構造函數,只是鏈接不是自動的。

它不必被稱爲init,但它開始於init幾乎是通用的。 例如:

- (id)initWithString:(NSString *)string { 
    self = [super init]; 
    if (self) { 
     self.myString = string; 
    } 
    return self; 
} 
0

首先,沒有必要。 init用於初始化實例變量的屬性。當你使用你自己的類時,你不會喚起init。這在我看來,alloc等於constructor。通過一個非常簡單的例子,我告訴了原因。當我們想使用單例模式時,很容易在java或其他編程語言中使用constructor補充。在對象c中的對象C或IOS中也很容易,儘管沒有明確的構造方法。在Apple的官方示例中,您會發現它們只是在NSObject中重寫allocWithZone,alloc最後喚起它。所以我認爲alloc是Object C中的構造函數。但是我認爲你最好使用init。它是約定或標準。因此本書使用must這個詞。無論編程語言初始化是什麼done.Just蘋果明確強調它

相關問題