為什麼 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 高級工程師是怎麼進階的?

TAG:iOS | 字體 | 中文字體 | iOS應用 | iOS開發 |