NSPointerFunctionsCopyIn混乱

时间:2013-12-03 11:03:05

标签: ios objective-c

我尝试将NSDate对象添加到配置了NSPointerArray)选项的NSPointerFunctionsCopyIn中:

NSDate *today= [NSDate date];

NSPointerArray *p_arr = [NSPointerArray pointerArrayWithOptions:NSPointerFunctionsCopyIn];

[p_arr addPointer:(void *)today];

 // comparing addresses;

 NSLog(@" Addresses are: %p  , %p " , today , [p_arr pointerAtIndex:0]);

//Addresses are:0x1004005d0  , 0x1004005d0

但正如我所知,“NSPointerFunctionsCopyIn”我的指针数组中的对象应该是新副本而不是共享对象。

1 个答案:

答案 0 :(得分:1)

如中所述 Friday Q&A 2010-05-28: Leopard Collection ClassesNSPointerFunctionsCopyIn选项导致使用“复制”对象指针 NSCopying协议。这并不一定意味着创建了一个新对象。

对于不可变对象(例如NSDate),NSCopying 可以通过保留来实现 原始而不是创建一个新的副本。这就是发生的事情 在你的情况下:

NSDate *today = [NSDate date];
NSDate *today2 = [today copy];

NSLog(@"%p %p", today, today2);
// Output: 0x1001040f0 0x1001040f0