最近正在開發一個應用,應用里面使用SQLite 數據庫的地方比較多,一些下載的內容都進行了SQLite數據庫緩存,應用開發完成之后發現一個嚴重的問題,程序莫名其妙的崩潰,使用XCode的內存分析工具分析后發現,Controller已經完全釋放了,但是打開Controller的時候升高的內存只釋放了三分之一,然后來回的打開Controller和關閉Controller以后發現每次都是一樣,如此反復之后內存就溢出了。
這個問題太奇怪了,我非常確認 Controller中調用的所有對象的 Delegate 都置為nil 了,所有創建對象都被置為nil 了,但是內存還是莫名其妙的無法釋放,最后經過反復調試發現SQLite數據庫在打開的時候非常消耗內存,只要是打開數據庫不關閉,內存就會保持在一個穩定的值,也就是說,在程序啟動的時候打開一次數據庫就可以不用關閉了,這樣的話內存反而能長期保持在一個非常低的值,而且還有一個好處就是執行SQL的時候非常快(這個倒是可以理解,每次執行SQL的時候不用打開和關閉數據庫了嘛)。
本人之前是做過很長一段時間的服務端開發,從我接觸數據庫開始,所有教材都是告誡我,使用完數據庫之后一定要關閉,這樣的話可以有效的釋放連接 和內存,但是坑爹的IOS居然是變相的鼓勵不關閉數據庫,這個簡直就是顛覆了我的世界觀,讓我說什么好呢?只能呵呵了,希望以后各位不會遇到相同的問題。
新聞熱點
疑難解答