GPUImage或OpenGL中出現(xiàn)“Message from debugger: Terminated due to memory issue”的問(wèn)題

在使用GPUImage合成視頻的時(shí)候碰到了“Message from debugger: Terminated due to memory issue”的問(wèn)題,在Stack Overflow上搜了半天,發(fā)現(xiàn)很多種情況下都可能會(huì)出現(xiàn)這個(gè)問(wèn)題,而且這個(gè)問(wèn)題也不一定是因?yàn)閮?nèi)存占用太高造成的,也有可能是內(nèi)存使用錯(cuò)誤造成的,比如說(shuō)內(nèi)存重復(fù)使用等等。。。

我遇到的場(chǎng)景是內(nèi)存占用穩(wěn)定在100M左右,并沒(méi)有什么大的變化,所以應(yīng)該不是內(nèi)存占用太高的問(wèn)題,而應(yīng)該是內(nèi)存使用錯(cuò)誤的問(wèn)題,但Xcode又沒(méi)有給出任何提示,只有單單的一句“Message from debugger: Terminated due to memory issue”,這個(gè)就很蛋疼了。

因?yàn)槌绦虿皇且婚_(kāi)始就報(bào)錯(cuò),是跑了幾秒鐘之后才報(bào)錯(cuò),所以我就嘗試單步調(diào)試,看能不能具體定位到是哪里出錯(cuò),但很遺憾的是,這個(gè)方法行不通,單步斷點(diǎn)下去很久都不會(huì)報(bào)錯(cuò),或者根本全程都沒(méi)報(bào)錯(cuò)。。。這讓我突然想到,會(huì)不會(huì)跟多線程有關(guān)呢?

然后猛然瞅見(jiàn)斷點(diǎn)的位置:Thread 10 Queue : com.apple.root.default-qos (concurrent)
我是直接用DispatchQueue.global().async {} 來(lái)執(zhí)行這段代碼的,
難道DispatchQueue.global().async {}派發(fā)的隊(duì)列原來(lái)是個(gè)concurrent隊(duì)列?
這可從來(lái)沒(méi)有注意到過(guò)。。。
抱著試一試的心態(tài),我自己創(chuàng)建了一個(gè)串行隊(duì)列,然后用這個(gè)隊(duì)列來(lái)執(zhí)行這段代碼,

let queue = DispatchQueue(label: "com.lxm.testSerialQueue")
queue.async { xxx }

結(jié)果居然沒(méi)問(wèn)題了????????????

具體什么原理我還沒(méi)搞清楚,但用一個(gè)串行隊(duì)列確實(shí)解決了這個(gè)問(wèn)題(也許只是個(gè)例,碰巧。。。)
有空再仔細(xì)研究一下吧。。。
哪位大佬知道原因,望不吝賜教~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容