我想驗證一些我總是使用的東西,但是當我考慮它時...我感到困惑爲什麼它以這種方式工作,我確定我閱讀了有關它的解釋,但無法找到它。 據我瞭解蘋果創建他們的setter是這樣的。更改屬性對象不會影響屬性
-(void)setString:(NSString *)value {
if (_string != value) {
[_string release];
_string = [value retain];
}
}
現在通常我會創建像這樣的屬性。
@property (nonatomic) NSString *string;
@synthesize string = _string;
的問題是關於下一個代碼:
NSString *s = @"Should be deleted";
[self setString:s];
NSLog(@"string check111 =%@",self.string);
s = NULL;
NSLog(@"string check222=%@",self.string);
相同的輸出將被生成。從setter中我可以看到我的屬性指向了我更改的對象,但屬性值將是相同的。這種情況觸發另一個問題(如果它的工作原理爲什麼我需要複製屬性)。 有人可以提供一個簡短的解釋嗎? (或具體鏈接閱讀)。 Tnx很多。 (我覺得我的問題可能已經要求在論壇)
您斷言「應該刪除字符串」首先是錯誤的。只需設置NULL的引用與它指向的對象的釋放無關。 – erkanyildiz
你沒事,如果我有機會,我會刪除那個愚蠢的問題。 –