iOS集成flutter混編內(nèi)存泄漏問題

如果不知道如何集成flutter可以看我的上一篇文章《iOS老項(xiàng)目集成flutter最新混編方案》

集成flutter進(jìn)入項(xiàng)目后發(fā)現(xiàn)每次進(jìn)入flutter模塊都是導(dǎo)致內(nèi)存增加60M-80M并且退出flutter頁面后掸鹅,內(nèi)存并不會(huì)釋放秦驯,具體原因是由于每次進(jìn)入Flutter頁面都會(huì)創(chuàng)建新的的FlutterViewController,但退出的時(shí)候并沒有釋放务冕。

為什么google難以解決:

由于整個(gè)FlutterEngine是用MRC的方式編寫伤为,所以內(nèi)存管理比較困難,每個(gè)變量生成retain,都需要被release鞠眉,如果一個(gè)實(shí)例retain了兩次,只release一次择诈,也會(huì)導(dǎo)致無法釋放械蹋,如果設(shè)置了autorelease,就有可能提前釋放羞芍,導(dǎo)致badasses哗戈,訪問野指針。

客觀原因荷科,一般的應(yīng)用只會(huì)創(chuàng)建一個(gè)flutter應(yīng)用唯咬,或者干脆就直接都是flutter應(yīng)用,不釋放就不釋放畏浆,多點(diǎn)內(nèi)存也無所謂胆胰,不影響崩潰,不影響使用全度,所以google照常發(fā)布1.0版煮剧。

官方發(fā)布最新的解決方案,使用FlutterEngine初始化FlutterViewController

FlutterViewController *flutterViewController = [[FlutterViewControlleralloc]initWithEngine:flutterEnginenibName:nilbundle:nil];

通過類別發(fā)現(xiàn)将鸵,此方案確實(shí)使FlutterViewController釋放勉盅,但拒網(wǎng)上查詢資料得知google團(tuán)隊(duì)只是將內(nèi)存泄漏轉(zhuǎn)嫁到FlutterEngine對(duì)象上,并沒有徹底解決內(nèi)存問題顶掉,實(shí)踐發(fā)現(xiàn)草娜,每次打開Flutter頁面內(nèi)存會(huì)增長(zhǎng)不到1M左右,與之前暴漲的80M內(nèi)存相比痒筒,此方案還是在可接受范圍宰闰。

有大神徹底解決內(nèi)存泄漏的問題,通過自己修改frameword的方式簿透,有興趣的可以了解下相關(guān)文章移袍。傳送門

但是這個(gè)方案有個(gè)致命的缺陷,就是每次flutter升級(jí)都需要下載最新的frameword文件老充,對(duì)于沒有能力自己編寫frameword文件的同學(xué)葡盗,我更加傾向于官方的解決方案,不到1M的內(nèi)存泄漏還是在可以接受的范圍內(nèi)的啡浊。

官方方案:


AppDelegate.h


AppDelegate.m


ViewController.m

但是觅够,使用官方解決方案發(fā)現(xiàn)我們想通過[flutterViewControllersetInitialRoute:@"route1"];通過不同的routename加載不同flutter頁面不再生效胶背,原因是在AppDelegate中運(yùn)行[self.flutterEnginerunWithEntrypoint:nil];這行代碼的時(shí)候,flutter已經(jīng)初始化好了,這時(shí)在flutter中通過window.defaultRouteName獲取到的route一直是默認(rèn)的/喘先,為了解決可以加載不同flutter頁面的問題钳吟,我通過native向flutter發(fā)送消息,flutter接受到消息后加載不同頁面的方法來解決窘拯。


flutter代碼
flutter代碼


oc代碼
oc代碼

這時(shí)問題又來了,flutter中調(diào)用eventChannel.receiveBroadcastStream(postArg).listen(onData ,onError: onError);時(shí)苦丁,OC代碼中的FlutterEventChannel還未運(yùn)行到搏色,這就導(dǎo)致eventSink綁定不成功,所以[flutterEngine runWithEntrypoint:nil];與FlutterEventChannel對(duì)象必須同時(shí)生成末盔,我是通過單例解決這一問題的:


單例.h


單例.m

項(xiàng)目啟動(dòng)初始化單例,如果等到點(diǎn)擊進(jìn)入flutter頁面的時(shí)候再初始化單例,這時(shí)[flutterEngine runWithEntrypoint:nil];運(yùn)行策幼,flutter剛剛創(chuàng)建會(huì)導(dǎo)致跳轉(zhuǎn)時(shí)頁面會(huì)白2-3秒来累,所以在項(xiàng)目初始化時(shí)锉试,將flutter也初始化拱礁。

初始化單例

代碼Demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末然爆,一起剝皮案震驚了整個(gè)濱河市斤吐,隨后出現(xiàn)的幾起案子搔涝,更是在濱河造成了極大的恐慌,老刑警劉巖和措,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庄呈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡派阱,警方通過查閱死者的電腦和手機(jī)诬留,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贫母,“玉大人文兑,你說我怎么就攤上這事∠倭樱” “怎么了绿贞?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)橘原。 經(jīng)常有香客問我籍铁,道長(zhǎng),這世上最難降的妖魔是什么趾断? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任拒名,我火速辦了婚禮,結(jié)果婚禮上芋酌,老公的妹妹穿的比我還像新娘增显。我一直安慰自己,他們只是感情好隔嫡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布甸怕。 她就那樣靜靜地躺著甘穿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梢杭。 梳的紋絲不亂的頭發(fā)上温兼,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音武契,去河邊找鬼募判。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咒唆,可吹牛的內(nèi)容都是我干的届垫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼全释,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼装处!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浸船,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤妄迁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后李命,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體登淘,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年封字,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黔州。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阔籽,死狀恐怖流妻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笆制,我是刑警寧澤合冀,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站项贺,受9級(jí)特大地震影響君躺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜开缎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一棕叫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奕删,春花似錦俺泣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽横漏。三九已至,卻和暖如春熟掂,著一層夾襖步出監(jiān)牢的瞬間缎浇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工赴肚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留素跺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓誉券,卻偏偏與公主長(zhǎng)得像指厌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踊跟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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