我应该在哪里放置用于在iOS中读取设备唯一ID的代码?

时间:2013-03-25 18:51:38

标签: iphone ios objective-c performance

我有以下代码用于读取唯一的设备ID。由于这将用于超过20种不同的视图(.m文件),我只是质疑自己是否有清洁和有效的方法来做到这一点?所以我想出了3个选项:

选项一:只需将这些代码复制/粘贴到我需要执行的任何地方。我认为这将是最糟糕的做法。

选项二:将其放入AppDelegate.m。这将在每次发布时运行一次(如果我是正确的话,可以节省很少的时间)。然后只要我需要就调用字符串“stringDeviceID”。

选项三:创建另一个类并将这些代码放入类函数中。但是,这仍然存在每次执行代码的“问题”。

我的问题是哪个是我必须选择的最佳/更好的选择?如果有其他选择甚至比其中任何一个更好,请告诉我。提前谢谢。

NSString *stringDeviceID;

if ([UIDevice instancesRespondToSelector:@selector(identifierForVendor)])
{
    stringDeviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
else
{
    stringDeviceID = [[UIDevice currentDevice] uniqueIdentifier];
}

1 个答案:

答案 0 :(得分:3)

我会将它作为UIDevice上的类别实现:

@iumplementation UIDevice (backwardCompatibleIdentifier)
- (NSString *)backwardCompatibleIdentifier {
    // your code
}
@end

然后,您所要做的就是:

NSString *myid = [[UIDevice currentDevice] backwardCompatibleIdentifier];

我严重怀疑这20次通话的性能成本会产生任何真正的性能差异。如果你担心,请测试一下。如果 出现问题,您可以在实现中添加缓存。如果甚至调用currentDevice太慢,你可以使它成为类方法而不是实例方法。

您的其他选择大多是合理的,除了一个:不要复制和粘贴20次。在某些时候,您将要删除uniqueIdentifier电话(无论是因为Apple强迫您,还是因为您想要放弃iOS 5兼容性)。您可能想要添加OpenUDID或其他一些第三方库。无论你做什么,你都希望能够在一个地方改变它,而不是在19个地方改变它,然后在6个月之后调试你忘记的那个地方......