2012-08-15 47 views
0

我努力學習我碰到下面的代碼,編譯器生成在幕後爲@property(nonatomic, retain) NSString* myField這是正確的語法,myField_ = [newValue retain]?

-(NSString*) myField 
{ 
    return myField_; //assuming myField_ is the name of the field. 
} 

-(void) setMyField:(NSString*) newValue 
{ 
    if(newValue != myField_) 
    { 
    [myField_ release]; 
    myField_ = [newValue retain]; 
    } 
} 

現在的問題是來到目標C;爲什麼要在newValue上調用retain?相反,下面的語法應使用:

myField_ = newValue; 
[myField_ retain]; 

請指教,爲什麼不使用上述語法因爲按我的理解,我們想要對象保留指向myField_

回答

3

它們是一樣的(都是正確的)。你不複製對象 - 保留返回已保留了相同的指針,所以它的更短和更清潔的寫

ivar = [newObj retain]; 

不是單獨分配和保留的對象。

+0

感謝您的回覆H2CO3! – 2012-08-15 06:22:01

+0

@n_g歡迎:) – 2012-08-15 06:22:50

2

兩種語法都是正確的。在第一種情況下,我們還保留由myField指向的對象,因爲我們將它分配給[newValue retain]

+0

感謝您的回覆安德烈! – 2012-08-15 06:22:40

+0

非常歡迎! – 2012-08-15 06:24:10