具有相同内存地址的两个实例

时间:2018-06-05 07:56:57

标签: objective-c

对于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>

我确信第一个实例在弹出时已被释放。

我的直觉告诉我,这应该很少发生。这是否意味着使用相同的地址创建同一对象的两个实例很容易?

1 个答案:

答案 0 :(得分:0)

如果您需要唯一值,请使用NSUUID。您可以在名为@property的类上创建一个uniqueIentifier,它返回您(可能)在创建实例时生成的NSUUID。该财产应该是只读的。