【发布时间】:2011-01-11 09:37:09
【问题描述】:
这个问题让我有点困惑。 在“.h”文件中。
@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。所以代码的第二部分应该输出与第一部分代码相同的内存地址和不同的containCount。 并且@property (nonatomic,copy) 会将对象复制到一个新区域。所以第三部分代码应该输出与第一部分代码不同的内存地址。 为什么我得到这个结果。 非常感谢。
【问题讨论】:
-
你得到了什么结果?
-
str1 = testRetain将 ivar 直接设置为相同的内存地址。要使用访问器,您必须使用self.str1 = testRetain; self.str2 = testRetain
标签: iphone objective-c cocoa copy retain