leo*_*leo 5 iphone cocoa-touch objective-c ios
我正在为自定义A类实现copyWithZone方法,其中NSNumber指针被声明为(retain)属性
@class A <NSCopying>
{
NSNumber *num;
}
@property (nonatomic, retain) NSNumber *num; // synthesized in .m file
-(id) copyWithZone:(NSZone*) zone {
A *new = [[A alloc] init];
new.num = [num copy];
return new;
}
Run Code Online (Sandbox Code Playgroud)
当我调试时,我总是发现new.num与self.num的地址相同.
即使我使用
new.num = [NSNumber numberWithFloat: [num floatValue]];
Run Code Online (Sandbox Code Playgroud)
我仍然得到相同的地址.最后,我必须使用
new.num = [[[NSNumber alloc] initWithFloat:[num floatValue]] autorelease]
Run Code Online (Sandbox Code Playgroud)
实现我想要的结果.我只是想知道为什么NSNumber符合但复制时不返回新的内存地址?
谢谢
狮子座
bbu*_*bum 11
NSNumber是不可变的.制作副本毫无意义,因此,在调用副本时,框架只返回self.
如果类实现NSCopying,则应将该属性标记为copy(不retain). -copyon immutable classes(NSString)将只返回对象的引用(带有凸起的保留计数).如果传递了一个可变实例,它将被复制到一个不可变实例.这可以防止外部方改变对象背后的状态.
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |