我尝试将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”我的指针数组中的对象应该是新副本而不是共享对象。
答案 0 :(得分:1)
如中所述
Friday Q&A 2010-05-28: Leopard Collection Classes,
NSPointerFunctionsCopyIn
选项导致使用“复制”对象指针
NSCopying
协议。这并不一定意味着创建了一个新对象。
对于不可变对象(例如NSDate
),NSCopying
可以通过保留来实现
原始而不是创建一个新的副本。这就是发生的事情
在你的情况下:
NSDate *today = [NSDate date];
NSDate *today2 = [today copy];
NSLog(@"%p %p", today, today2);
// Output: 0x1001040f0 0x1001040f0