对于NSObject的实例,我想将哈希用作其唯一标识。但我很快发现有时候我创建了两个具有相同地址的实例,导致相同的哈希值,请看下面的代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"new iCMMessageHomeViewController: %@", self);
}
然后我用这个ViewController多次推送和弹出,日志是这样的:
2018-06-05 15:21:14.167585+0800 iCityCQ[11685:4240006] new iCMMessageHomeViewController: <iCMMessageHomeViewController: 0x109f41080>
......
2018-06-05 15:21:17.861901+0800 iCityCQ[11685:4240006] new iCMMessageHomeViewController: <iCMMessageHomeViewController: 0x109f41080>
我确信第一个实例在弹出时已被释放。
我的直觉告诉我,这应该很少发生。这是否意味着使用相同的地址创建同一对象的两个实例很容易?
答案 0 :(得分:0)
如果您需要唯一值,请使用NSUUID。您可以在名为@property
的类上创建一个uniqueIentifier
,它返回您(可能)在创建实例时生成的NSUUID。该财产应该是只读的。