以编程方式显示iPhone/iPad UDID

Lia*_*iam 4 iphone uniqueidentifier uiwebview udid ipad

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

uid = [[UIDevice currentDevice] uniqueIdentifier];
uid = [uid stringByReplacingOccurrencesOfString:@"-" withString:@""];
Run Code Online (Sandbox Code Playgroud)

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

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

NSLog("Loading request with UDID: %@", uid);
Run Code Online (Sandbox Code Playgroud)

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

Loading request with UDID: (
    <WebView: 0x4b0fb90>
)
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ter 10

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

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

在此行上设置uid变量时:

uid = [uid stringByReplacingOccurrencesOfString:@"-" withString:@""];
Run Code Online (Sandbox Code Playgroud)

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

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

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

祝好运!