使用WKWebView注意內(nèi)存釋放

往WKWebView內(nèi)注入JS方法時(shí)村刨,出現(xiàn)內(nèi)存無(wú)法釋放問(wèn)題

先說(shuō)說(shuō)wkWebView與JS交互的方法吧

WKWebViewConfiguration*config = [[WKWebViewConfigurationalloc] init];

[config.userContentController addScriptMessageHandler:selfname:@"與后臺(tái)約定的方法名"];

//創(chuàng)建webView

WKWebView ?*webView ?= [[WKWebView alloc]initWithFrame:self.view.frame configuration:config];

wenView.navigationDelegate = self;

在上面的這個(gè)方法里面去創(chuàng)建一個(gè)webView睬塌,并且約定方法名稱(chēng)谨胞。

執(zhí)行本地的方法時(shí)會(huì)調(diào)用以下代理方法

-(void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message{

//message.body

可以打印JS端給你傳過(guò)來(lái)的數(shù)據(jù)扎阶,可以根據(jù)數(shù)據(jù)去執(zhí)行相應(yīng)的方法

}

你以為JS調(diào)用本地的方法就完事了嗎?

錯(cuò)誤上沐,你會(huì)發(fā)現(xiàn)調(diào)用方法后皮服,內(nèi)存根本不釋放。也就是dealloc方法不執(zhí)行参咙。

問(wèn)題就出現(xiàn)在

[config.userContentController addScriptMessageHandler:self name:@"與后臺(tái)約定的方法名"];

這句代碼上面龄广,準(zhǔn)確的說(shuō)是“self”的身上。

那么怎么解決呢蕴侧?

解決方法一

我們可以把self換掉择同,就是說(shuō)用其他換掉self,這里面就要新建一個(gè)類(lèi)

在.h里面是這樣的

#import

@interfaceXLWeakScriptMessageDelegate:NSObject

@property(nonatomic,weak)id scriptDelegate;

- (instancetype)initWithDelegate:(id)scriptDelegate;

@end

在.m里面是這樣的

#import "XLWeakScriptMessageDelegate.h"

@implementationXLWeakScriptMessageDelegate

- (instancetype)initWithDelegate:(id)scriptDelegate{

self= [superinit];

if(self) {

_scriptDelegate =scriptDelegate;

}

return self;

}

- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message{

[

self.scriptDelegateuserContentController:userContentControllerdidReceiveScriptMessage:message];

}

@end

新建的類(lèi)我都寫(xiě)在這里了净宵,大家可以拿過(guò)去直接用敲才。

下面說(shuō)的是最重要的改動(dòng),就是把

WKWebViewConfiguration*config = [[WKWebViewConfigurationalloc] init];

[config.userContentController addScriptMessageHandler:self name:@"與后臺(tái)約定的方法名"];

這里面的代碼改造成

WKWebViewConfiguration*config = [[WKWebViewConfigurationalloc] init];

[config.userContentController addScriptMessageHandler:[[

XLWeakScriptMessageDelegatealloc] initWithDelegate:self] name:@"callback"];

//創(chuàng)建webViewWKWebView*webView = [[WKWebViewalloc] initWithFrame:self.view.frameconfiguration:config];

webView.navigationDelegate = self;

這樣一來(lái)塘娶,會(huì)發(fā)現(xiàn)內(nèi)存釋放了归斤,dealloc方法會(huì)被執(zhí)行了。

解決方法二刁岸、

.在當(dāng)前界面顯示的時(shí)候往WKWebView中注入JS脏里,當(dāng)界面消失時(shí)移除JS方法

- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

[self.webView..configuration.userContentController addScriptMessageHandler:self name:@"與后臺(tái)約定的方法名"];

}

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillAppear:animated];

[self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"與后臺(tái)約定的方法名"];

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虹曙,隨后出現(xiàn)的幾起案子迫横,更是在濱河造成了極大的恐慌番舆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矾踱,死亡現(xiàn)場(chǎng)離奇詭異恨狈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)呛讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)禾怠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贝搁,你說(shuō)我怎么就攤上這事吗氏。” “怎么了雷逆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵弦讽,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我膀哲,道長(zhǎng)往产,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任某宪,我火速辦了婚禮仿村,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缩抡。我一直安慰自己奠宜,他們只是感情好包颁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布瞻想。 她就那樣靜靜地躺著,像睡著了一般娩嚼。 火紅的嫁衣襯著肌膚如雪蘑险。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天岳悟,我揣著相機(jī)與錄音佃迄,去河邊找鬼。 笑死贵少,一個(gè)胖子當(dāng)著我的面吹牛呵俏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滔灶,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼普碎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了录平?” 一聲冷哼從身側(cè)響起麻车,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缀皱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后动猬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啤斗,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年赁咙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钮莲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彼水,死狀恐怖臂痕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猿涨,我是刑警寧澤握童,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站叛赚,受9級(jí)特大地震影響澡绩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俺附,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一肥卡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧事镣,春花似錦步鉴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至随闪,卻和暖如春阳似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铐伴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工苍姜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留续扔,地道東北人研底。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓踱阿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親户矢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玲献,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 1、加載網(wǎng)頁(yè) WKWebView *webView = [[WKWebView alloc] initWithFr...
    LearningCoding閱讀 3,119評(píng)論 0 2
  • 前言: web頁(yè)面和app的直接的交互是很常見(jiàn)的東西,在ios8之前青自,用的是uiwebview株依,但是在ios8之后...
    qingchen91閱讀 2,956評(píng)論 6 25
  • 開(kāi)發(fā)App的過(guò)程中,常常會(huì)遇到在A(yíng)pp內(nèi)部加載網(wǎng)頁(yè)延窜,通常用UIWebView加載恋腕。這個(gè)自iOS2開(kāi)始使用的網(wǎng)頁(yè)加載...
    皮皮瑞閱讀 366評(píng)論 0 0
  • 前言 Xcode8發(fā)布以后,編譯器開(kāi)始不支持IOS7逆瑞,所以很多應(yīng)用在適配IOS10之后都不在適配IOS7了荠藤,其中包...
    Zoneday閱讀 2,037評(píng)論 0 2
  • “拿破侖用劍未竟的事業(yè), 我將用筆予以完成获高」ぃ”巴爾扎克在他的偶像拿破侖塑像的劍鞘上刻下這么一句話(huà)。他做到了嗎念秧? 巴...
    江南吹雪閱讀 1,612評(píng)論 2 19