我尝试将一个NSDate对象添加到配置有(NSPointerFunctionsCopyIn)选项的NSPointerArray中:
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“,指针数组中的对象应该是一个新的副本,而不是一个共享的对象。
发布于 2013-12-03 11:28:13
正如在周五Q&A 2010-05-28:豹收藏班中解释的那样,NSPointerFunctionsCopyIn选项导致使用NSCopying协议“复制”对象指针。这并不一定意味着要创建一个新的对象。
对于不可变对象(如NSDate),可以通过保留原始对象而不是创建新副本来实现NSCopying。这就是在你的案例中发生的事情:
NSDate *today = [NSDate date];
NSDate *today2 = [today copy];
NSLog(@"%p %p", today, today2);
// Output: 0x1001040f0 0x1001040f0https://stackoverflow.com/questions/20349340
复制相似问题