為什麼 iOS 中加粗字體需要重啟(Respring),而改變字型大小卻不用?
首先糾正一點:加粗其實不會重啟,而是「註銷」,在 iOS 里稱為 respring,就是重啟名為 springboard 的程序,這和在 Windows 里重啟 explorer.exe 是一個概念。
為什麼需要 respring,其實就是加粗會更換整套 UI 字體(比如「黑體UI-簡 細體」會改成「黑體UI-簡 中等」)。iOS 的機制是在運行程序時把程序請求的字體載入內存;如果該程序中途要更換字體,那麼只能關掉程序重啟,以便重新載入字體。開啟加粗時,整個 UI 字體都需要更換(比如鎖屏字體、圖標字體等等);負責管理 UI 界面的程序叫做 springboard,和 Windows 里的 explorer.exe 一個地位,因此我們需要重啟 springboard,為它載入新字體。重啟 springboard 時,設備會白蘋果幾秒鐘,這會給用戶帶來「手機重啟」的假象,所以蘋果乾脆就這麼說明給用戶嘍,省時省力。細心的朋友肯定會發現,關閉/開啟加粗時系統「重啟」的速度特別快,原因就在這裡——其實根本沒有重啟!不信?腎 5s 以上的知友可以試試,先打開指紋解鎖,然後手動重啟手機,指紋解鎖時系統會提示「重啟 iPhone 後必須輸入密碼解鎖」;接下來呢,打開加粗,等系統「重啟」之後立刻指紋解鎖,你會發現它就真的解鎖了!不用輸入密碼!!這不就是系統根本沒有重啟的鐵證嘛!!!
相比之下,改變字型大小只是字體大小調節,並不涉及字體本身的重新載入,況且無論字型大小怎麼改,springboard 也不會改,故不需要 respring。
ps:想給 XP 換個宋體還需要重啟呢,但改變字型大小就不用重啟~哈哈哈哈!DeadLine快到了,現在清理一下目前可能影響發布的Bug:
#xxxx ……#xxxx ……
#xxxx ……#xxxx ……#7794 當用戶選擇加粗字體時,某些界面可能出現錯亂。#xxxx ……#xxxx ……
…………Bug#7794 被標記為已解決,解決方案,當用戶切換字體加粗效果時,強制重新載入 shell 。加粗,換語言,應該都是要換字體了。調大小不用換字體。
樓主混淆概念了。
「加粗」 和 "粗體" 是兩個概念。樓主問的其實是後者。一個字體可以有很多style, 比如Roboto這個字體從 最細的thin 到 最粗的Ultra Bold 總共12種不同粗細,相當於12種不同字體。 這12種都可以再次被"加粗"。"粗體"是字體設計者設計出來的字體樣式;"加粗"是字體繪製到屏幕上的時候被"再次"加粗一些。
推薦閱讀:
※iOS 和 Android 到底哪個優秀?哪個更有前景?理由是什麼?
※iOS開發,視頻播放,項目不支持橫屏,如何監測手機是否橫屏?並旋轉視頻播放器view?
※如何在 Windows 下進行 iOS 開發?
※iOS開發 APP必須使用HTTPS怎麼搞?
※iOS 高級工程師是怎麼進階的?