首先纹腌,需要說(shuō)明的是,這個(gè)Bug是否是系統(tǒng)Bug無(wú)法直接證明神僵,至少在我的測(cè)試環(huán)境下確認(rèn)并不是由我們App引起的Bug覆劈,這個(gè)Bug在一個(gè)新構(gòu)造的項(xiàng)目中也能復(fù)現(xiàn)责语,經(jīng)此坤候,我判斷為蘋果在iOS9中刪改了一部分代碼導(dǎo)致的系統(tǒng)Bug企蹭。
該Bug對(duì)App的內(nèi)存消耗有一定影響谅摄,而且測(cè)試發(fā)現(xiàn)難以釋放送漠,萬(wàn)幸的是,國(guó)內(nèi)大多數(shù)App幾乎不可能出現(xiàn)這個(gè)Bug尼酿,但裳擎,若有朋友維護(hù)的App需要與阿拉伯地區(qū)打交道則需稍加警惕思币。
該Bug判斷為特殊字符無(wú)法識(shí)別引起的Bug支救,具體緣由似乎是蘋果在構(gòu)造iOS9的時(shí)候取消了一部分特殊字符的支持各墨,導(dǎo)致當(dāng)使用iOS9大版本的設(shè)備進(jìn)行測(cè)試時(shí)XCode控制臺(tái)會(huì)報(bào)相應(yīng)警告(在iOS8中不會(huì)出現(xiàn)該Bug)贬堵,當(dāng)特殊字符出現(xiàn)在Label中時(shí)控制臺(tái)會(huì)報(bào)如下警告:
2016-08-04 18:22:08.506 Shou[422:116177] CoreText: *** Unmapped ".????" <CTFont: 0x12fcfbc00>{name = .SFUIText-Regular, size = 16.000000, matrix = 0x0, descriptor = <CTFontDescriptor: 0x12fab5c00>{attributes = <CFBasicHash 0x12fab6f30 [0x1a123f150]>{type = mutable dict, count = 2,
entries =>
0 : <CFString 0x19cc53be0 [0x1a123f150]>{contents = "NSCTFontUIUsageAttribute"} = <CFString 0x19cc440c0 [0x1a123f150]>{contents = "CTFontRegularUsage"}
2 : <CFString 0x19cc53740 [0x1a123f150]>{contents = "NSFontNameAttribute"} = <CFString 0x19cc47160 [0x1a123f150]>{contents = ".SFUIText-Regular"}
}
>}}
似乎簡(jiǎn)書無(wú)法識(shí)別代碼塊中 Unmapped后的字符的樣子黎做,它的具體形狀就像兩朵蒲公英一樣。
在測(cè)試中我僅發(fā)現(xiàn)Xcode可以完美識(shí)別出特殊字符(瀏覽器悉數(shù)陣亡)筷厘。
也是機(jī)緣巧合酥艳,當(dāng)我在處理Right To Left 相關(guān)細(xì)節(jié)的時(shí)候才發(fā)現(xiàn)這中字符應(yīng)該是阿拉伯文的一種(至少它出現(xiàn)在阿拉伯文軟鍵盤中爬骤,至于它是不是霞玄,反正我也看不懂坷剧。)
就像這樣:
無(wú)法識(shí)別的特殊字符就是這么一群家伙,當(dāng)然补鼻,這只是我找到的风范,具體蘋果去除了多少類似字符的支持也無(wú)從判斷硼婿,但至少當(dāng)你的App中出現(xiàn)它們時(shí)是會(huì)受到影響的寇漫。
那么州胳,問(wèn)題來(lái)了栓撞,這些無(wú)法識(shí)別的字符到底會(huì)給App帶來(lái)怎么樣的影響呢?
這里我們用一個(gè)App相關(guān)的功能進(jìn)行測(cè)試瓢颅。
Today Extension是我們App中的一部分,蘋果對(duì)Extension的建議內(nèi)存消耗是10M,當(dāng)內(nèi)存消耗超出10M時(shí)則會(huì)報(bào)內(nèi)存警告信柿。
如上圖所示,一個(gè)不存在特殊字符的Today Extension內(nèi)存消耗為8.6M虎囚。
那么角塑,當(dāng)Label中存在特殊字符的內(nèi)存消耗是多少呢蔫磨?
在其他數(shù)據(jù)都不存在變化的時(shí)候淘讥,內(nèi)存消耗增加了2M多,并且這不是峰值數(shù)據(jù)堤如,最高峰值曾達(dá)到12M+蒲列。
僅僅是兩次測(cè)試并不能保證數(shù)據(jù)的嚴(yán)謹(jǐn)性,因此搀罢,以TodayExtension為測(cè)試對(duì)象蝗岖,共準(zhǔn)備了三組其他數(shù)據(jù)相同,唯有顯示文本不同的測(cè)試對(duì)象榔至,分別為英文文本抵赢、繁中文本邢享、繁中文本帶特殊字符三組伊履,各測(cè)試4次。(實(shí)在找不到英文文本帶特殊字符的對(duì)象,天知道灣灣為何喜歡在名字里加莫名其妙的特殊字符。)
英文文本內(nèi)存消耗為8.2睛廊、8.3邓馒、8.2、8.2。
繁中文本內(nèi)存消耗為8.2戳寸、8.3、8.0虏辫、8.2娄昆。
繁中文本帶特殊字符內(nèi)存消耗為11.1、11.7、11.5撼玄、11.9眉睹。
很明顯慕蔚,帶有特殊字符的內(nèi)存消耗比其他兩組高上不少十偶,目前并不清楚該內(nèi)存消耗的增加僅在Xcode測(cè)試環(huán)境下因?yàn)榭刂婆_(tái)警告而存在還是任何環(huán)境下都會(huì)存在狮崩,我想后者的概率更大毡熏。
有興趣的朋友可以在DEMO中測(cè)試一下。