2014-02-27 40 views
-2

我對Objective-C非常陌生,並且想解決前一個問題。也許這是非常基本的,但我想知道什麼是初始化對象的最佳方式。在我編寫的一些簡短代碼中,我沒有看到使用'init'方法或者直接聲明類中參數值的視覺差異。但是,當我有一個很大的代碼實例化幾個對象時,哪些是實例化對象的最佳方式,或者有比這兩個更好的選擇?在Objective-C中初始化對象的最佳方法

舉例來說,我已經創建了一個接口,MyTestInterface,它使用幾個班,我也在我的項目發佈:

@interface MyTestInterface() 

@property (nonatomic, retain) MyTestClassOne 
@property (nonatomic, retain) MyTestClassTwo 

... 

每個類(MyTestClassOne,MyTestClassTwo,...)有一定的其他屬性,以及接口本身,必須進行初始化。我想澄清我的問題,對於那些不太瞭解的人,詢問是否有辦法初始化接口的對象,能夠減少內存消耗和編譯時間,當需要實例化多個對象時在這種情況下。提前致謝。

+0

你有任何的例子嗎? – Popeye

+1

你的問題不清楚。 downvote並投票結束。特別是我很困惑「構造函數」 –

+0

我的意思是,直接初始化參數,就像在Java中一樣。我想我「可能」已經改變了我的問題。將編輯它,謝謝@AndreyChernukha –

回答

0

在Objective-C中初始化對象是在類的指定的初始化程序或其他初始化程序中完成的。對於NSObject的直接子類,這通常是'init'方法。您始終可以使用自定義指定的初始化程序。使用初始化程序總是會更好,因爲當您擴展一個類並且需要初始化的超類的依賴項時,它會被初始化,因爲當您初始化一個對象時,通常會調用超類的init。這個超類的init調用直到它到達NSObject。

初始化一類的一般方法是

NameOfClass *myClass = [[NameOfClass alloc] init]; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 

    // you set your default values here 
    myLength = 10; //ex 
    } 
    return self; 
} 

關於自定義指定初始化器。您可以使用自定義指定initialisers在自定義值通過從其他對象

NameOfClass *myClass = [[NameOfClass alloc] initWithLength:10]; 

- (id)initWithLength:(int)length 
{ 
    self = [super init]; 
    if (self) { 

    // you set your default values here 
    myLength = length; //ex 
    } 
    return self; 
} 
+0

瞭解。感謝你給出了非常好的解釋(我想我真的在探討Objective-C的時候在地板上爬行) –

+0

還有一件事,你只需要初始化init方法中最重要的對象或者你在子類中需要的對象物體。其他人可以使用懶惰初始化在任何地方初始化。 :)我們都在某個時間點在那裏。所以別擔心。 – Sathya

+0

感謝您的建議,它肯定會有用 –

0

有對Objective-C的一些介紹材料上蘋果公司的網站:

https://developer.apple.com/library/mac/documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html

如果你是剛剛開始使用Objective-C,真正有幫助的是從一本介紹書開始,比如Big Nerd Ranch的其中之一:

Mac OS X的可可編程 http://www.amazon.com/Cocoa-Programming-Mac-4th-Edition/dp/0321774086/ref=pd_sim_b_3?ie=UTF8&refRID=02AAS1C6T2JMZKJC6DXA

iOS的編程:大書呆子牧場指南 http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/dp/0321821521/ref=pd_sim_b_1?ie=UTF8&refRID=1KBR85MDBKH08Z88873Y

+0

謝謝,它可能會拯救我的一天!事實上,我一直在尋找一些好的材料,但是使用Google搜索引起了糟糕的結果。 –