2011-12-29 30 views
0

例如,我有一個UIViewController,並有一個值:什麼self.xxx之間的不同和對象 - C調用XXX直接?

NSString *testString; 

@property (nonatomic, retain) NSString *testString; 

在.M:

@synthesize testString; 

什麼是這兩行代碼之間的不同:

testString = @"something"; 
self.testString = @"something"; 
+3

那最好使用'copy',而不是'retain'爲'NSString'類型的實例。 – Kjuly 2011-12-29 08:37:22

回答

1

第一種情況分配新的價值testString,你是直接訪問testString

testString = @"something"; 

在第二種情況:

self.testString = @"something"; 

你是呼籲通過調用@synthesize testString和事實,即它是一個屬性產生setter

第二種情況的呼叫產生[aUIViewControllerObject setTestString: @"something"]其中@"something"NSString被保留(因爲testString屬性與retain參數聲明),舊值是autoreleasedreleased和新值分配給testString

0

self.testString = @"something";隱式調用setTestString:方法。在你的情況下,它是指以下情況:

-(void) setTestString: (NSString*) newString 
{ 
    if (testString != newString) 
    { 
     [testString release]; 
     testString = [newString retain]; 
    } 
} 
0
非ARC碼

是有顯著區別,如果你聲明屬性retaincopy。在這兩種情況下,有更多的事情在幕後當你調用self.property。很簡單地,retain確實是這樣的:

- (void)setFoo:(NSString *)newFoo { 
    [newFoo retain]; 
    [foo release]; 
    foo = newFoo; 
} 

,並複製它會是這樣的:

- (void)setFoo:(NSString *)newFoo { 
    NSString *oldFoo = foo; 
    foo = [newFoo copy]; 
    [oldFoo release]; 
} 

}

相關問題