Apple埋的坑 —— UIWebView

開(kāi)發(fā)中使用 UIWebView 來(lái)展示html頁(yè)面已經(jīng)是鋪天蓋地了。每每產(chǎn)品來(lái)句這個(gè)頁(yè)面html做, 心中真是輕松加愉快~~~

然而树姨,UIWebView 的坑仔細(xì)想想真是不少。。傻寂。。不知道是不是因?yàn)榭犹嘈訟pple干脆做了個(gè)WebKit疾掰,然后從iOS8開(kāi)始,可以使用WKWebView徐紧。記得之前看的C預(yù)言書上看到的一句話 : 程序員看到別人出現(xiàn)bug時(shí)静檬,往往會(huì)嘲笑——直到同樣的問(wèn)題出在了自己身上。并级。拂檩。至理名言。

言歸正傳嘲碧,這篇文章主要說(shuō)的是使用同一個(gè)webView多次調(diào)用 loadRequest 或者是 loadHtmlString方法時(shí)稻励,在webView釋放時(shí)會(huì)出現(xiàn)內(nèi)存泄漏的問(wèn)題。

loadRequest 和 loadHtmlString 方法算是最常用的了(沒(méi)幾個(gè)人回去用loadData)愈涩。我估計(jì)望抽,這三個(gè)load方法加矛,在加載完html之后的處理是一樣的。簡(jiǎn)而言之煤篙,就是先寫個(gè)switch斟览,區(qū)分出不同的load方式。而后舰蟆,load趣惠,之后添加手勢(shì)。

首先身害,先來(lái)看看webView的圖層結(jié)構(gòu):

webView圖層結(jié)構(gòu).png

webView-> webScrollView-> UIWebBrowserView味悄,最終,讓用戶能看到html內(nèi)容的塌鸯,就是UIWebBrowserView侍瑟。

從圖中可以看出,webView本生不會(huì)相應(yīng)觸摸事件丙猬。因?yàn)檎茄眨粀ebScrollView壓在身下,webScrollView又被UIWebBrowserView壓在身下茧球。所以庭瑰,即使繼承于UIWebView做一個(gè)子類,在這個(gè)子類的touchbegin 函數(shù)中也不會(huì)有任何信息抢埋。

所有的觸摸事件弹灭,其實(shí)都加在 UIWebBrowserView 上,而webview 管不著揪垄。(iOS4之前還有一個(gè)UIWebDocumentView穷吮,但這個(gè)已經(jīng)太久遠(yuǎn),不提了)UIWebBrowserView上面的觸摸事件一共有7種饥努,可以通過(guò)gestureRecognizers去看捡鱼。UIWebBrowserView是Apple的私有api,所以不能直接調(diào)用酷愧,要訪問(wèn)的話驾诈,要稍微繞一下彎。

以上是Apple的wenView的大概情況溶浴,坑出現(xiàn)在這里 —— 反復(fù)調(diào)用load方法的時(shí)候:

示例代碼.png

logs:

logs.png

如圖翘鸭,在log中顯示的是調(diào)用了4次load方法后打印的結(jié)果。第一次調(diào)用 load 的時(shí)候戳葵,其實(shí)并沒(méi)有 _UITextSelectionForceGesture(私有api) 這個(gè)手勢(shì)就乓。但是從第二次調(diào)用開(kāi)始,每調(diào)用一次,_UITextSelectionForceGesture 就會(huì)被添加一次生蚁。

使用 instrument leaks check 時(shí)發(fā)現(xiàn) _UITextSelectionForceGesture 存在循環(huán)引用的問(wèn)題:

牛逼哄哄的leaks.png

leaks check中我調(diào)用了5次load噩翠,所以看到的現(xiàn)象是有4個(gè)_UITextSelectionForceGesture泄漏了。

綜上所述邦投,對(duì)于一個(gè)webView 調(diào)用 load只有一次的話伤锚,是ok沒(méi)問(wèn)題的,但是同一個(gè)webView如果第二次志衣,第三次屯援,直到第n次的時(shí)候,會(huì)有 n - 1 個(gè) _UITextSelectionForceGesture無(wú)法釋放(觸摸事件和觀察者間循環(huán)引用了)念脯。

在webView出現(xiàn)泄漏時(shí)可以想想是不是這個(gè)情況狞洋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绿店,隨后出現(xiàn)的幾起案子吉懊,更是在濱河造成了極大的恐慌,老刑警劉巖假勿,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件借嗽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡转培,警方通過(guò)查閱死者的電腦和手機(jī)恶导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浸须,“玉大人惨寿,你說(shuō)我怎么就攤上這事∮鸾洌” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵虎韵,是天一觀的道長(zhǎng)易稠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)包蓝,這世上最難降的妖魔是什么驶社? 我笑而不...
    開(kāi)封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮测萎,結(jié)果婚禮上亡电,老公的妹妹穿的比我還像新娘。我一直安慰自己硅瞧,他們只是感情好份乒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般或辖。 火紅的嫁衣襯著肌膚如雪瘾英。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天颂暇,我揣著相機(jī)與錄音缺谴,去河邊找鬼。 笑死耳鸯,一個(gè)胖子當(dāng)著我的面吹牛湿蛔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播县爬,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼阳啥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捌省?” 一聲冷哼從身側(cè)響起苫纤,我...
    開(kāi)封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纲缓,沒(méi)想到半個(gè)月后卷拘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祝高,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年栗弟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辨图。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妙啃。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖猛铅,靈堂內(nèi)的尸體忽然破棺而出陆蟆,到底是詐尸還是另有隱情雷厂,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布叠殷,位于F島的核電站改鲫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏林束。R本人自食惡果不足惜像棘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壶冒。 院中可真熱鬧缕题,春花似錦、人聲如沸胖腾。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瓶摆,卻和暖如春凉逛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背群井。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工状飞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人书斜。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓诬辈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親荐吉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子焙糟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • IOS之UIWebView的使用 剛接觸IOS開(kāi)發(fā)1年多,現(xiàn)在對(duì)于 混合式 移動(dòng)端開(kāi)發(fā)越來(lái)越流行样屠,因?yàn)殚_(kāi)發(fā)成本上穿撮、...
    學(xué)無(wú)止境666閱讀 45,790評(píng)論 5 53
  • OS之UIWebView的使用 剛接觸IOS開(kāi)發(fā)1年多,現(xiàn)在對(duì)于 混合式 移動(dòng)端開(kāi)發(fā)越來(lái)越流行痪欲,因?yàn)殚_(kāi)發(fā)成本上悦穿、速...
    知之未道閱讀 1,658評(píng)論 0 4
  • 前言 關(guān)于UIWebView的介紹,相信看過(guò)上文的小伙伴們业踢,已經(jīng)大概清楚了吧栗柒,如果有問(wèn)題,歡迎提問(wèn)知举。 本文是本系列...
    CoderLF閱讀 8,968評(píng)論 2 12
  • iOS 的 Cookie 存取 https://juejin.im/entry/58d4c4cc44d904006...
    Farmers閱讀 5,930評(píng)論 0 16
  • 習(xí)慣雇锡,就是典型的“時(shí)間律”逛钻,所有的事情都有它的自然規(guī)律,都必須經(jīng)過(guò)花費(fèi)一定的時(shí)間锰提,加上其他如努力等的附力來(lái)獲取曙痘。嗶...
    MISS任閱讀 285評(píng)論 1 1