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

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

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

因為程序不是一開始就報錯,是跑了幾秒鐘之后才報錯,所以我就嘗試單步調(diào)試,看能不能具體定位到是哪里出錯,但很遺憾的是,這個方法行不通,單步斷點下去很久都不會報錯,或者根本全程都沒報錯。。。這讓我突然想到,會不會跟多線程有關(guān)呢?

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

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

結(jié)果居然沒問題了????????????

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

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

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