簡體   English   中英

Swift iOS-循環運行得比Date()。timeIntervalSince1970生成的Date Secs快嗎

[英]Swift iOS -Can a Loop Run Faster then Date Secs generated by Date().timeIntervalSince1970

我從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生成的值安全得多,並且具有在代碼中進行自我記錄的其他好處。 當您看到UUID struct時,一眼就知道您正在創建唯一標識符。

蘋果公司的UUID使用RFC 4122第4版 ,該版本具有5.3x10 ^ 36的可能值 ,從而使碰撞的可能性微乎其微

您可以替換以下行:

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

有了這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM