2012-05-02 42 views
0

使用ARC,是現在確定分配一個字符串值是這樣的:如何使用ARC在Objective C中分配字符串值?

self.userName = [[NSString alloc] initWithString:self.currentParsedCharacterData]; 

抑或仍然造成內存泄露,因此要求我給它分配是這樣的:

NSString *tmpString = [[NSString alloc] initWithString:self.currentParsedCharacterData]; 
self.userName = tmpString; 
+0

去看WWDC 2011會議323.它會比任何人都能在這裏更全面地解釋ARC。 –

回答

2

ARC下的第一個代碼段很好,而且兩種方法中的更好。蘋果有一個這樣的例子在Transitioning to ARC指南:

- (void)contrived { 
    Person *aPerson = [[Person alloc] init]; 
    [aPerson setFirstName:@"William"]; 
    [aPerson setLastName:@"Dudney"]; 
    [aPerson setYearOfBirth:[[NSNumber alloc] initWithInteger:2011]]; 
    NSLog(@"aPerson: %@", aPerson); 
} 

,並說:

ARC負責內存管理這樣既不會Person也不NSNumber對象被泄露。

setYearOfBirth:消息與allocNSNumber對應於您的片段。

編譯器的理解是,在第一種情況下,aPerson是走出去的範圍,需要在這之前發生被釋放,而在第二種情況下,沒有明確提及NSNumber對象,它必須被釋放或放入autorelease池。它代表您處理這些要求。

+1

該指南中存在拼寫錯誤(函數的第4行,'aPerson:'應該是'aPerson')。我應該提出一個錯誤。 – dreamlax

+0

謝謝指出! –

0

是,用ARC可以。事實上,我會建議你實施它的第一種方式。

0

你的任何一個例子都很好。在內存管理/ ARC方面,兩者沒有區別。