以编程方式显示iPhone / iPad UDID

时间:2010-07-29 04:33:42

标签: iphone ipad uiwebview uniqueidentifier udid

我有一个iPad应用程序,我通过viewDidLoad方法中的以下代码获取设备的UDID。

uid = [[UIDevice currentDevice] uniqueIdentifier];
uid = [uid stringByReplacingOccurrencesOfString:@"-" withString:@""];

我想删除字符串中的破折号。

稍后,在另一个方法调用中,我尝试访问此uid字符串(这是此类的属性),

NSLog("Loading request with UDID: %@", uid);

当我尝试将其打印出来时,我在控制台窗口中收到以下内容。

Loading request with UDID: (
    <WebView: 0x4b0fb90>
)

为什么打印内存地址而不是字符串本身?谢谢!

3 个答案:

答案 0 :(得分:10)

您遇到的问题与内存管理有关。我以前遇到过这个问题。

当您对NSI进行NSLog时,您获得的是WebView对象的地址。当uid是NSString时,为什么会发生这种情况?让我带您了解内存管理的魔力:D

在此行上设置uid变量时:

uid = [uid stringByReplacingOccurrencesOfString:@"-" withString:@""];

您所做的是为uid分配一个自动释放的变量。这意味着它将被释放,内存位置将被抢夺。在此函数结束和下次访问它之间,它已被释放,并存储了其他内容。

你如何解决这个问题?当你为像uid这样的属性赋值时,总是通过@property声明创建的setter方法来完成它。使用self.uid = string[self setUid:string。这将正确释放旧字符串并保留新字符串。

这是一个问题,花了我很多时间试图找到有问题的线。可能发生的另一个症状是当您尝试向已发布的对象发送消息时程序崩溃。这些非常难以追查。希望我的回复可以帮助你,你不必忍受这种挫折:)

祝你好运!

答案 1 :(得分:3)

NSLog(“...”)应为NSLog(@“...”)

答案 2 :(得分:2)

uniqueIdentifier已从iOS 5中弃用。

你应该使用其他功能:

[[[UIDevice currentDevice] identifierForVendor] UUIDString]