【发布时间】:2015-05-18 16:10:33
【问题描述】:
我想将关联对象添加到NSDate 对象。为此,我使用了here 描述的方法。
我现在的问题是 iOS 不会(不再?)为同一日期创建不同的 NSDate 对象(请参阅here)。因此,如果我有两个具有相同 NSDate 的项目,我无法区分这些对象,并且我为特定项目添加关联对象的方法失败。
我尝试了不同的方法:
- 使用
copy方法NSDate NSDate *deepCopy = [[NSDate alloc] initWithTimeInterval:0 sinceDate:date];-
NSDate *deepCopy = [date dateByAddingTimeInterval:0];
但我命名为deepCopy 的变量不是原始date 对象的深层副本。
我能做什么?
【问题讨论】:
-
通常当 NS 做一些棘手的事情时,你可以获得一个不做那些棘手事情的 CF 纯 C 版本,或者你至少可以关闭...developer.apple.com/library/ios/documentation/CoreFoundation/…
-
我认为这也是一个解决方案。但是,我仍然希望有人有另一个想法,这意味着我当前项目的更改更少。 :-)
-
问题是64位运行时在很多情况下使用“标记指针”(其中指针不是指针而是直接包含信息)。不幸的是,关联对象不适用于标记指针,这也在这里观察到:stackoverflow.com/questions/21561211/…。
-
@Martin R:谢谢!现在可以确定了:我必须更改我的代码。
-
即使在最好的情况下,Objective-C“关联对象”机制也是脆弱的。最好避免它。
标签: ios objective-c