2013-04-25 52 views
-1

我很困惑,你能告訴我哪一個更好,爲什麼?哪一個更好分配初始化或新的

我在某處讀到這兩個都用於分配和初始化。有人告訴我,你不能做喜歡newWithString和所有其他類似的東西,但是當我在Xcode試過那麼它沒有給我錯誤

 NSString *AddEmail =[[NSString alloc]initWithString:@"Add Email"]; 

     NSString *AddEmail =[NSString new]; 

做到既會工作在同樣的方式?

預先感謝您

+1

http://stackoverflow.com/questions/3330963/alloc-init-and-new-in-objective-c – 2013-04-25 06:34:33

+0

你從哪裏找到這個方法newWithString:? – Anupdas 2013-04-25 06:34:34

+0

我不知道我只是在我的Xcode累了,沒有錯誤 – 2013-04-25 06:34:57

回答

3

[[SomeClass alloc] init]可以得到同樣的結果[SomeClass new]。新的實現爲

+ (id) new 
{ 
    return [[self alloc] init]; 
} 

您使用的newWithString方法給出一個比較明確的警告:「類方法+newWithString沒有發現」,所以即使你的代碼編譯,它會在此行失敗。 (除非您在NSString上聲明瞭一個類別)。

我傾向於選擇[[alloc] init],因爲你可以分配一個對象,然後選擇您將如何初始化它的變量,根據您選擇的init()方法..

+0

是的,我知道了我的xcode有一些問題沒有顯示錯誤,但編譯時錯誤 – 2013-04-25 06:43:01

1

+[NSString new]簡單地返回一個空的,不可改變的字符串。

它相當於[[NSString alloc] init]

你的例子是不一樣的。如果我正確地猜測你的意圖,NSString * AddEmail = @"Add Email";將是你需要寫的。在本例中,您不需要使用+alloc,-initWithString:,+stringWithString:等,因爲@"Add Email"已經是NSString

[[TYPE alloc] init][TYPE new]是等價的(除非被覆蓋)。您選擇的是您的偏好。我更喜歡[TYPE new],因爲它更短,並且無論何時創建「新」對象,都不需要分離(或發音)alloc/init消息鏈。