gpt4 book ai didi

ios - Swift iOS - 循环运行速度是否比 Date().timeIntervalSince1970 生成的日期秒快

转载 作者:行者123 更新时间:2023-11-28 15:29:36 29 4
gpt4 key购买 nike

我从 Firebase 中提取一些数据,将数据添加到一个循环中,然后在每个循环运行时打印秒数。循环是否有可能运行得如此之快以至于它会打印两次相同的秒数?

例如在下面的代码中,这种结果是可能的吗?

image0__1507792099
image1__1507793000
image2__1507793001
image3__1507793001
image4__1507793002
image5__1507793002

image2 和 image3 是否可以打印相同的时间戳?image4 和 image5 是否可以打印同样的事情?

var images:[String] = []
let secs = Int(Date().timeIntervalSince1970)

myRef?.observeSingleEvent(of: .value, with: {
(snapshot) in

if let dict = snapshot.value as? [String:Any]{

let image0 = dict["image0"] as? String
let image1 = dict["image1"] as? String
let image2 = dict["image2"] as? String
let image3 = dict["image3"] as? String
let image4 = dict["image4"] as? String
let image5 = dict["image5"] as? String

self.images.append(image0)
self.images.append(image1)
self.images.append(image2)
self.images.append(image3)
self.images.append(image4)
self.images.append(image5)

for image in self.images{
print("\(image)__\(self.secs)")
let x = someConversionMethodThatReturnsAnImage(str: image)
saveData(image: x)
}
}
}

fileprivate func saveData(image: UIImage){
let imageExt = String(describing: secs).appending(".jpg")
let fileManager = FileManager.default
let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! as NSURL
let imagePath = documentsPath.appendingPathComponent(imageExt)?.path
let data = UIImageJPEGRepresentation(image, 0.8)
fileManager.createFile(atPath: imagePath!, contents: data, attributes: nil)
}

仅供引用,我问这个问题的原因是因为我使用 secs 作为将 Firebase 数据添加到 DocumentsDirectory 的扩展。一切都运行良好,但我不确定时间是否会重叠,这意味着如果提取和保存的某些数据具有相同的时间戳,它们将被覆盖。我在考虑改用 arc4Random。

最佳答案

虽然您当然可以使用时间戳来使文件名唯一,但我不会这样做。即使它现在可以正常工作,情况也可能会发生变化,使循环运行得更快并导致您丢失数据,因为您在同一时间段内创建了两个文件。还有一些因素,例如时钟因夏令时或其他调整而改变。我会使用一种更安全的方法来完全避免这种机会:使用 UUID。

UUID 是一系列值,通过算法或随机方式设计为尽可能唯一。它们比时间戳或通过 arc4Random 生成的值安全得多,并且它们具有在代码中 self 记录的额外好处。当您看到 UUID struct您一眼就知道您正在创建一个唯一标识符。

Apple 的 UUID 使用 RFC 4122 version 4其中有 5.3x10^36 possible values , 留下机会 collisons无穷小。

你可以替换这一行:

    let imageExt = String(describing: secs).appending(".jpg")

用这个:

    let imageExt = UUID().uuidString.appending(".jpg")

关于ios - Swift iOS - 循环运行速度是否比 Date().timeIntervalSince1970 生成的日期秒快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876920/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com