這個問題讓我有點困惑。 在「.h」文件中。關於保留和複製的問題目標c
@property (nonatomic,retain) NSMutableString *str1;
@property (nonatomic,copy) NSMutableString *str2;
在「.m」文件中。
NSMutableString *testRetain = [[NSMutableString alloc] initWithString:@"prefix"];
NSLog(@"retain count is %d",[testRetain retainCount]);
NSLog(@"mem add is %p",testRetain);
str1 = testRetain;
NSLog(@"retain count is %d",[testRetain retainCount]);
NSLog(@"mem add is %p",testRetain);
str2 = testRetain;
NSLog(@"retain count is %d",[str2 retainCount]);
NSLog(@"mem add is %p",str2);
所有的retainCount和內存地址都是一樣的。 據我所知,@property(nonatomic,retain)將添加被指向的對象的retainCount。因此,代碼的第二部分應輸出相同的內存地址,並從第一部分代碼輸出不同的containsCount。 和@property(nonatomic,copy)會將對象複製到一個新的區域。所以第三部分代碼應該從代碼的第一部分輸出不同的內存地址。 爲什麼我得到了這個結果。 非常感謝。
您得到了什麼結果? –
'str1 = testRetain'正在將伊娃直接設置爲相同的內存地址。要使用訪問器,你必須使用'self.str1 = testRetain; self.str2 = testRetain' – mackross
馬克羅斯是正確的。 –