【发布时间】:2011-12-14 16:48:40
【问题描述】:
NSDate 符合 NSCopying 协议。根据 NSCopying 协议的文档:
a copy must be a functionally independent object with values identical
to the original at the time the copy was made.
但是,当我这样做时:
NSDate *date1 = [NSDate date];
NSDate *date2 = [date1 copy];
NSLog(@"result: date1 0x%x date2 0x%x", (int)date1, (int)date2);
// "result: date1 0x2facb0 date2 0x2facb0"
这两个对象是相同的(相同的对象 id)。我错过了什么?如何获取独立对象作为副本?
【问题讨论】:
-
你不需要一个独立的对象。
NSDates 是不可变的。您无法更改它们,因此-copy返回相同的对象无关紧要。 -
应该注意的是,Objective-C 架构允许将某些不可变的“对象”实现为指针中的自包含值。即,使用指针中的几个保留位来标识类型,指针值的其余部分实际上可以是“对象”。我不知道 Apple 是否承认对任何对象执行此操作,但对于 NSDate 对象和几种 NSNumber 风格显然是可行的。
标签: objective-c nsdate