转载自:http://zhidao.baidu.com/link?url=ALPSV0wPnkbJQQVMyH33iJW-OAGyYviLLAryrNdr_U7M_YzGVt3tUrfMQrIpGwsI0dKGx-kg88UjijcvMxZOmZP3F917tqh-yuoAxrFYLaG
CFUUID从iOS2.0开始,CFUUID就已经出现了。它是CoreFoundatio包的一部分,因此API属于C语言风格。CFUUIDCreate 方法用来创建CFUUIDRef,并且可以获得一个相应的NSString,如下代码: CFUUIDRef cfuuid =CFUUIDCreate(kCFAllocatorDefault); NSString *cfuuidString =(NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid)); 复制代码 获得的这个CFUUID值系统并没有存储。每次调用CFUUIDCreate,系统都会返回一个新的唯一标示符。如果你希望存储这个标示符,那么需要自己将其存储到NSUserDefaults, Keychain, Pasteboard或其它地方。 示例: 68753A44-4D6F-1226-9C60-0050E4C00067 NSUUIDNSUUID在iOS 6中才出现,这跟CFUUID几乎完全一样,只不过它是Objective-C接口。+ (id)UUID 是一个类方法,调用该方法可以获得一个UUID。通过下面的代码可以获得一个UUID字符串: NSString *uuid =[[NSUUID UUID] UUIDString]; 复制代码 跟CFUUID一样,这个值系统也不会存储,每次调用的时候都会获得一个新的唯一标示符。如果要存储的话,你需要自己存储。在我读取NSUUID时,注意到获取到的这个值跟CFUUID完全一样(不过也可能不一样): 示例: 68753A44-4D6F-1226-9C60-0050E4C00067 广告标示符(IDFA-identifierForIdentifier)这是iOS 6中另外一个新的方法,advertisingIdentifier 是新框架AdSupport.framework的一部分。ASIdentifierManager单例提供了一个方法advertisingIdentifier,通过调用该方法会返回一个上面提到的NSUUID实例。 NSString *adId =[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; 复制代码 跟CFUUID和NSUUID不一样,广告标示符是由系统存储着的。不过即使这是由系统 存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。之所以会这样,我猜测是由于 ASIdentifierManager是一个单例