iOS-UITextField密文模式(secureTextEntry)下內(nèi)存泄漏

keywords: Textfield/UITextField/secureTextEntry/內(nèi)存泄漏

使用場(chǎng)景

近日蚜枢,用戶在使用我們的App的時(shí)候,發(fā)現(xiàn)一個(gè)問(wèn)題议谷,就是UITextfield在密文模式下庇楞,輸入一定長(zhǎng)度,出現(xiàn)卡死逗栽,閃退現(xiàn)象。剛開始以為是偶發(fā)性的失暂,結(jié)果用戶在重啟手機(jī)彼宠,重新打開應(yīng)用,問(wèn)題依然在弟塞。而在我自己的手機(jī)上凭峡,卻從來(lái)沒(méi)有出現(xiàn)過(guò)這個(gè)問(wèn)題,我的第一感覺可能是內(nèi)存泄漏决记。因此摧冀,我就使用AnalyzeLeaks進(jìn)行檢測(cè)內(nèi)存問(wèn)題,發(fā)現(xiàn)并未出現(xiàn)內(nèi)存泄漏提示。

原因分析

所以索昂,當(dāng)時(shí)有考慮可能是另外的原因:

  1. 手機(jī)應(yīng)用系統(tǒng)版本
  2. 可能是三方庫(kù)Bug

有了問(wèn)題建车,就要去解決問(wèn)題,根據(jù)猜想椒惨,進(jìn)行驗(yàn)證

1.手機(jī)系統(tǒng)版本問(wèn)題

這個(gè)驗(yàn)證比較簡(jiǎn)單缤至,得知用戶手機(jī)系統(tǒng)版本為iOS 10.0.1,于是找到一個(gè)相同版本的手機(jī)進(jìn)行測(cè)試康谆,發(fā)現(xiàn)當(dāng)textfield為密碼模式的時(shí)候领斥,真的會(huì)出現(xiàn)卡死,而且此時(shí)內(nèi)存暴增沃暗,最終被系統(tǒng)kill掉月洛。而在其他系統(tǒng)版本iOS10之前版本,和iOS10.3都沒(méi)問(wèn)題(iOS 10.0.2~iOS 10.2版本未測(cè)試)孽锥。所以考慮極有可能是因?yàn)橄到y(tǒng)版本問(wèn)題膊存。

2.排除三方庫(kù)Bug

為了排除三方庫(kù)引起的Bug,于是我就創(chuàng)建一個(gè)demo忱叭,不引入任何三方庫(kù)。
使用在storyboard上拉一個(gè)UITextField,設(shè)置如下圖:

UITextfieldConfiguration.png

iOS 10.0.1系統(tǒng)上運(yùn)行今艺,發(fā)現(xiàn)依然出現(xiàn)問(wèn)題韵丑,其他版本暫未發(fā)現(xiàn),如圖:

IMG_0106.PNG

由此可見虚缎,這個(gè)問(wèn)題應(yīng)該是iOS10.0.1UITextField的一個(gè)Bug撵彻,而不是三方庫(kù)引起的。

問(wèn)題所在

根據(jù)自己在storyboard修改的textfield的屬性实牡,一個(gè)一個(gè)的排查陌僵,發(fā)現(xiàn)當(dāng)Secure Text Entry,設(shè)置為YESFont 的值大于Min Font Size的值的時(shí)候创坞,就會(huì)出現(xiàn)這個(gè)問(wèn)題碗短。而當(dāng)Secure Text Entry設(shè)置為NO時(shí),卻一切正常题涨。由此推測(cè)是密碼模式下引起的問(wèn)題偎谁。

猜想

根據(jù)目前的情況來(lái)看,UITextField在密碼模式下纲堵,輸入到一定長(zhǎng)度(這里的一定長(zhǎng)度巡雨,是根據(jù)textfield的長(zhǎng)度而言),才會(huì)觸發(fā)內(nèi)存泄漏席函,造成卡死铐望。我們都知道,當(dāng)textfield輸入的長(zhǎng)度達(dá)到一定值的時(shí)候,輸入的內(nèi)容會(huì)自動(dòng)變小正蛙,那么會(huì)不會(huì)是在這一瞬間引起的內(nèi)存泄漏呢督弓?帶著猜想,我進(jìn)行了下面的實(shí)驗(yàn)跟畅,在ViewController中加入如下代碼:

//在視圖控制器的視圖的layoutSubviews方法被調(diào)用之前調(diào)用咽筋。 子類可以根據(jù)需要實(shí)現(xiàn)。 默認(rèn)是nop徊件。
- (void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    NSLog(@"%@",NSStringFromSelector(_cmd));
}
//在視圖控制器的視圖layoutSubviews方法被調(diào)用之后調(diào)用奸攻。 子類可以根據(jù)需要實(shí)現(xiàn)。 默認(rèn)是nop
- (void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

明文模式下虱痕,當(dāng)輸入長(zhǎng)度達(dá)到一定值時(shí)睹耐,輸入內(nèi)容字體變小時(shí),發(fā)現(xiàn)果然會(huì)調(diào)用上面的兩個(gè)方法部翘,但只調(diào)用一次(除非再次變化)硝训,而密碼模式下,卡死的一瞬間新思,一直重復(fù)調(diào)用上面的兩個(gè)方法窖梁。這就證實(shí)了上面的猜想,在重新渲染的時(shí)候夹囚,發(fā)生了內(nèi)存泄漏纵刘。

另外,還發(fā)現(xiàn)一個(gè)問(wèn)題荸哟,純代碼創(chuàng)建UITextField貌似假哎,不會(huì)出現(xiàn)上面的問(wèn)題。

總結(jié)

通過(guò)對(duì)比鞍历,發(fā)現(xiàn)這個(gè)問(wèn)題舵抹,只是會(huì)出現(xiàn)在xib或者storyboard創(chuàng)建UITextField時(shí),純代碼創(chuàng)建不會(huì)出現(xiàn)這個(gè)問(wèn)題劣砍,所以極有可能是在iOS10.0.1版本下惧蛹,xib或者storyboard的一個(gè)bug

解決方案

鑒于此秆剪,目前我能找到的解決方案:

  1. 升級(jí)手機(jī)系統(tǒng)赊淑。
  2. 密碼模式下,Font 的值小于等于Min Font Size的值仅讽。
  3. 使用代碼創(chuàng)建UITextField,不使用xibStoryboard陶缺。

以上,才疏學(xué)淺洁灵,錯(cuò)誤之處饱岸,還請(qǐng)批評(píng)指正掺出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苫费,隨后出現(xiàn)的幾起案子汤锨,更是在濱河造成了極大的恐慌,老刑警劉巖百框,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闲礼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铐维,警方通過(guò)查閱死者的電腦和手機(jī)柬泽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嫁蛇,“玉大人锨并,你說(shuō)我怎么就攤上這事〔桥铮” “怎么了第煮?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)抑党。 經(jīng)常有香客問(wèn)我包警,道長(zhǎng),這世上最難降的妖魔是什么底靠? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任揽趾,我火速辦了婚禮,結(jié)果婚禮上苛骨,老公的妹妹穿的比我還像新娘。我一直安慰自己苟呐,他們只是感情好痒芝,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牵素,像睡著了一般严衬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笆呆,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天请琳,我揣著相機(jī)與錄音,去河邊找鬼赠幕。 笑死俄精,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榕堰。 我是一名探鬼主播竖慧,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嫌套,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了膏潮?” 一聲冷哼從身側(cè)響起痒谴,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碾篡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后痹筛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廓鞠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年帚稠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诫惭。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翁锡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夕土,到底是詐尸還是另有隱情馆衔,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布怨绣,位于F島的核電站角溃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏篮撑。R本人自食惡果不足惜减细,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赢笨。 院中可真熱鬧未蝌,春花似錦、人聲如沸茧妒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桐筏。三九已至纸型,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梅忌,已是汗流浹背狰腌。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牧氮,地道東北人琼腔。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踱葛,于是被迫代替她去往敵國(guó)和親展姐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躁垛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容