目標C規格(蘋果)第49頁指出 聲明一個實例變量,必須提供每個類的init方法來初始化它們iOS的 - 爲什麼是init必要和其他的init問題
我的問題 - 爲什麼這是必要的?不是NSObject初始化一個實例的iVar?
應該認爲init是一個構造函數。
是否必須將init命名爲init?我可以做 id anObject = [[SomeClass alloc] foo];
Muchas gracias。
目標C規格(蘋果)第49頁指出 聲明一個實例變量,必須提供每個類的init方法來初始化它們iOS的 - 爲什麼是init必要和其他的init問題
我的問題 - 爲什麼這是必要的?不是NSObject初始化一個實例的iVar?
應該認爲init是一個構造函數。
是否必須將init命名爲init?我可以做 id anObject = [[SomeClass alloc] foo];
Muchas gracias。
init方法與構造函數類似,但不會自動調用。你必須自己調用它。
調用它「init」是一個常見的約定,但不是一個要求。
默認init
的NSObject
不會觸及你的實例變量。 spec中的聲明意味着如果您使用類似NSString *str
或NSDate *d
的對象作爲類的實例變量,則需要對其進行初始化。這通常發生在init
,儘管你可以用其他方法初始化它們。
是的,你可以有[[SomeClass alloc] foo]
返回一個對象。
類通常不知道他們的子類的內部和NSObject是沒有不同的那種方式。
alloc
+ init
非常像構造函數,只是鏈接不是自動的。
它不必被稱爲init
,但它開始於init
幾乎是通用的。 例如:
- (id)initWithString:(NSString *)string {
self = [super init];
if (self) {
self.myString = string;
}
return self;
}
首先,沒有必要。 init
用於初始化實例變量的屬性。當你使用你自己的類時,你不會喚起init。這在我看來,alloc
等於constructor
。通過一個非常簡單的例子,我告訴了原因。當我們想使用單例模式時,很容易在java或其他編程語言中使用constructor
補充。在對象c中的對象C或IOS中也很容易,儘管沒有明確的構造方法。在Apple的官方示例中,您會發現它們只是在NSObject中重寫allocWithZone
,alloc最後喚起它。所以我認爲alloc
是Object C中的構造函數。但是我認爲你最好使用init。它是約定或標準。因此本書使用must
這個詞。無論編程語言初始化是什麼done.Just蘋果明確強調它
'-foo'不會是一個靜態方法,如果'alloc'返回該類的一個實例... – 2012-04-07 15:39:06
@ RichardJ.RossIII啊,是的,謝謝你的解釋。 – 2012-04-07 15:40:31