【发布时间】:2014-09-09 23:32:33
【问题描述】:
我正在尝试使用 UUID 生成随机数以用于 Twitter 反向身份验证。但显然 UUID 不是一个好的选择。那么,如何在每次剥离所有非单词字符时生成一个唯一的随机字符串,并注意它在使用后从内存中释放。以下代码崩溃。
var uuid: CFUUIDRef = CFUUIDCreate(nil)
var nonce: CFStringRef = CFUUIDCreateString(nil, uuid)
CFRelease(uuid)
println("createdNonce:\(nonce)")
编辑: 我在 xcode6 beta2 上,我无法调试,并且 xocde 崩溃,任何机会。好吧,CFRelease 部分对我来说是崩溃的。一旦我删除,它似乎工作正常,但我不知道这是否会造成内存泄漏。
至于为什么 UUID 可能不是用于 nonce 的好选择,似乎是因为 UUID 不是由真正的随机位组成的,请在此处参考此讨论:https://github.com/aws/aws-sdk-ios/issues/30
【问题讨论】:
-
看看
NSUUID,它是ObjC,因此更适合Swift。为什么不直接为 nonce 生成一个随机字符串? -
你能解释一下为什么你认为 UUID 是一个糟糕的选择吗?这段代码在 Swift 操场上对我来说很好用。您能否分享有关崩溃的更多详细信息?
-
添加信息@AaronGolden
-
@srinivas 参考我关于崩溃的回答
-
@srinivas UUID v4(我假设
CFUUID使用,v4 是随机的)在 128 个中提供 122 个随机位。根据您的需要,这可能就足够了。当然,假设您不将其序列化为十六进制。