2

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

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

选项二:将其放入 AppDelegate.m。这只会在每次启动时运行一次(如果我是对的,可能会节省一点时间)。然后只要我需要就调用字符串“stringDeviceID”。

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

我的问题是我必须选择哪个最好/更好的选择?如果有比这些更好的选择,请告诉我。提前致谢。

NSString *stringDeviceID;

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

1 回答 1

3

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

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

然后,您所要做的就是:

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

我严重怀疑调用这 20 次的性能成本是否会产生任何真正的性能差异。如果您担心,请测试它。如果这一个问题,您可以在实现中粘贴一个缓存。如果调用currentDevice太慢,你可以把它变成类方法而不是实例方法。

您的其他选择大多是合理的,除了一个:不要复制和粘贴 20 次。在某些时候,您会想要删除uniqueIdentifier呼叫(无论是因为 Apple 强迫您,还是仅仅因为您想放弃 iOS 5 兼容性)。您可能想要添加 OpenUDID 或其他一些第三方库。无论您做什么,您都希望能够在 1 个地方进行更改,而不是在 19 个地方进行更改,然后在 6 个月后调试您忘记的 1 个地方……</p>

于 2013-03-25T18:56:50.617 回答