當前位置:
首頁 > 最新 > 輸錯密碼後iPhone提示請47年後再試一次?這其實是個早就存在的BUG!

輸錯密碼後iPhone提示請47年後再試一次?這其實是個早就存在的BUG!

微飯科技:輸錯密碼被鎖47年?等解鎖時還得給自己兒子解釋其實是爸爸年輕時犯的錯?其實這只是iPhone一個BUG而已。。

只因輸錯密碼,手機提示停用47年。上海嘉定,陸女士稱兩歲半的兒子在玩手機時,因連續輸錯解鎖密碼,手機竟提示「請25114984分鐘(約等於47.78年)後再試一次」。陸女士稱,手機里有重要資料,不想刷機,但也不可能等40多年,難道要告訴孫子這是你爸爸惹的禍?

啥BUG?

因為手機被鎖後電池電量耗盡斷電了,導致手機時間跳轉到1970-01-01,導致出現時間BUG,(1月2日應該是充電後想等他恢復。。)

1970+48=?2018!

這BUG涉及到一個UNIX時間戳問題。

UNIX時間戳

iOS系統時間使用Unix時間戳(Unix epoch)表示(time_t數據類型)。在系統中,使用系統位數個二進位位儲存時間。

Unix時間戳規定,UTC時區的1970年1月1日 0點0時0秒的值為0,以秒為單位,即每過一秒,二進位數字加1。

32位系統:

在32位系統中,time_t是長度為32位的,有符號整數(signed int)類型。首個二進位位是符號位,用來儲存正負。正數則為1970/1/1以後的時間,負數反之;其餘的31位用來記數。當時間到達2038年1月19日 3時14分08秒時,數值位全部向前進1,導致符號位被置1,其餘31位為0。介時,將出現『時間回歸』的情況,系統時間變為1901年12月13日 20時45分52秒,系統將會出現錯誤,出現錯誤後會出現各種各樣的BUG,這件事在iPhone 5s以上的機型發生(如視頻型號一致)。

所以後期Apple為了避免這種問題導致的錯誤發生,將最大時間期限定在了2038年1月1日 23時59分59秒。這樣即使超出這個範圍,在18天內也不會有太大問題,況且32位設備到那個時候基本都已經淘汰了。

64位系統會不會受到這個影響呢?通過計算我們可以得到,292,277,026,596年12月04日 15時30分08秒是64位系統可以表示的最大時間。

64位處理器的『時間回歸』問題

我們說到了以UTC時區的1970年1月1日 0點0時0秒為界限,數值為0,時間正常流逝為正數,反之為負數。不過各位需要留意的是,時間受到時區的影響。

假設一種情況,我原來是北京時區,假設將時間設置到了1970年1月1日 0點0時0秒,那麼我將這個時間轉換為UTC時間,公式:北京時間 = GMT+8 = UTC+8,那麼UTC時間則為1969年12月31日 16時0分0秒。這樣就會出現時間負值,即時間回歸bug觸發,系統啟動卡在Kernel(內核啟動)階段,時間錯誤,無法繼續進行啟動。

對待時間BUG問題可以採取的解決方式包括等待電池電量完全耗盡,或是拆開手機並斷開電池,或是進行設備固件升級(刷機等),但很顯然視頻中沒這麼幸運了(有重要數據),所以日常利用iCloud自動備份或者iTunes進行iPhone手動備份和遠離小盆友是非常必要的。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 iPhone 的精彩文章:

iPhone快捷鍵分享會,沒有一個不實用
iPhone性能控制開關VS低價換電池,用戶:蘋果換湯不換藥!

TAG:iPhone |