iOS APP 內(nèi)存泄露問題解決(一)

一做祝、開篇

最近幾天在做APP的性能優(yōu)化問題,遇到了很多問題,所以來總結(jié)和分享一下筑悴。
內(nèi)存泄露解決分為了三步:

  1. 靜態(tài)分析:Instruments的Analyze。通過靜態(tài)分析我們可以最初步的了解到代碼的一些不規(guī)范的地方和一些代碼邏輯上的錯(cuò)誤稍途;
  2. 解決ViewController不釋放的問題阁吝;
  3. Instruments的Leaks。運(yùn)行時(shí)分析內(nèi)存泄露情況并解決械拍;

根據(jù)這三步的解決內(nèi)存泄露問題突勇,每一步包含的內(nèi)容比較多,所以我分為三篇文章來寫坷虑。
這篇文章是總結(jié)靜態(tài)分析代碼的時(shí)候遇到的常見的幾類問題甲馋,及解決方法。首先會介紹下內(nèi)存泄露相關(guān)的基礎(chǔ)知識迄损。

二定躏、內(nèi)存泄露相關(guān)的基礎(chǔ)知識

1.概念

   內(nèi)存泄露:如果程序運(yùn)行時(shí)一直分配內(nèi)存而不及時(shí)釋放無用的內(nèi)存,程序占用的內(nèi)存越來越大芹敌,直到把系統(tǒng)分配給該APP的內(nèi)存消耗殫盡痊远,程序因無內(nèi)存可用導(dǎo)致崩潰,這樣的情況我們稱之為內(nèi)存泄漏氏捞。

2. 可能引起的問題

1)內(nèi)存消耗殆盡的時(shí)候碧聪,程序會因沒有內(nèi)存被殺死,即crash液茎。
2)當(dāng)內(nèi)存快要用完的時(shí)候逞姿,會非常的卡頓 
3)如果是ViewController沒有釋放掉辞嗡,引起的內(nèi)存泄露,還會引起其他很多問題滞造,尤其是和通知相關(guān)的欲间。沒有被釋放掉的ViewController還能接收通知,還會執(zhí)行相關(guān)的動(dòng)作断部,所以會引起各種各樣的異常情況的發(fā)生猎贴。

三、Analyze檢測出的幾種常見問題

使用Analyze能夠發(fā)現(xiàn)一些代碼不規(guī)范的地方蝴光。下面是我調(diào)試的過程中遇到的一些問題她渴。

  • value stored to ‘width’during its initialization is never read。

     該問題的原因是:變量申請了內(nèi)存并初始化了蔑祟,但沒有用使此變量趁耗,接著將此變量又從新賦值.
     
     - (CGSize)sizeForContent:(MGCMessageBaseEntity*)message
     {
     
      float width = size.width < 20 ? 20 : size.width + 5;
         width = size.width > MAX_CHAT_TEXT_WIDTH ? MAX_CHAT_TEXT_WIDTH : size.width;
         return CGSizeMake(width, size.height + 3);
     }
     規(guī)范的寫法是:float width = size.width > MAX_CHAT_TEXT_WIDTH ? MAX_CHAT_TEXT_WIDTH : size.width;
    
     
     還有一種情況是:為同一個(gè)數(shù)據(jù)源分配了兩塊內(nèi)存,這里不會引起內(nèi)存泄露疆虚,因?yàn)闉閍rr1分配的內(nèi)存塊雖然一直是空閑塊苛败,但是在生命周期結(jié)束時(shí),這塊內(nèi)存會被釋放掉径簿。跟前面說的罢屈,內(nèi)存泄露是內(nèi)存一直得不到釋放,才會造成內(nèi)存泄露篇亭。
      NSArray *arr1 = [[NSArray alloc]init];
     if(index == 1){
         arr1 = self.usersArray;
      }else{
         arr1 = self.editArray;
      }
     因?yàn)閟elf.usersArray和self.editArray都是被初始化過的數(shù)組缠捌,將它們賦值給了arr1,arr1又申請了內(nèi)存译蒂。規(guī)范的寫法是:NSArray *arr1曼月;不為arr1分配內(nèi)存。
    
  • Value stored to 'titleString' is never read

     該變量從來沒有被使用
    
  • Potential leak of an object allocated on line 101 and stored into ''

     潛在的內(nèi)存泄露:這里主要是一些非OC對象柔昼,ARC不會對它進(jìn)行釋放哑芹,所以造成了一直沒有釋放。比如一些類型:CGImageRef(對應(yīng)調(diào)用CGImageRelease)捕透、CGContextRef(對應(yīng)調(diào)用CGContextRelease)CGColorSpaceRef(對應(yīng)CGColorSpaceRelease) 這些都是非OC對象聪姿,所以要自己記著釋放掉。
    
  • Analyze還能檢查出一些邏輯上的錯(cuò)誤激率,并且指出原因咳燕,簡直太好用了勿决。不出例子了乒躺,因?yàn)榇a已經(jīng)解決了好幾天了,現(xiàn)在不存在有邏輯錯(cuò)誤的代碼了低缩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘉冒,一起剝皮案震驚了整個(gè)濱河市曹货,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讳推,老刑警劉巖顶籽,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異银觅,居然都是意外死亡礼饱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門究驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镊绪,“玉大人,你說我怎么就攤上這事洒忧『拢” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵熙侍,是天一觀的道長榄鉴。 經(jīng)常有香客問我,道長蛉抓,這世上最難降的妖魔是什么庆尘? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮巷送,結(jié)果婚禮上减余,老公的妹妹穿的比我還像新娘。我一直安慰自己惩系,他們只是感情好位岔,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堡牡,像睡著了一般抒抬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晤柄,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天擦剑,我揣著相機(jī)與錄音,去河邊找鬼芥颈。 笑死惠勒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爬坑。 我是一名探鬼主播纠屋,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盾计!你這毒婦竟也來了售担?” 一聲冷哼從身側(cè)響起赁遗,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎族铆,沒想到半個(gè)月后岩四,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哥攘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年剖煌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逝淹。...
    茶點(diǎn)故事閱讀 40,926評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡末捣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出创橄,到底是詐尸還是另有隱情箩做,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布妥畏,位于F島的核電站邦邦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏醉蚁。R本人自食惡果不足惜燃辖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望网棍。 院中可真熱鬧黔龟,春花似錦、人聲如沸滥玷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惑畴。三九已至蛋欣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間如贷,已是汗流浹背陷虎。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杠袱,地道東北人尚猿。 一個(gè)月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像楣富,于是被迫代替她去往敵國和親凿掂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評論 2 361

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

  • 內(nèi)存泄露解決分為了三步: 1.靜態(tài)分析:Instruments的Analyze菩彬。通過靜態(tài)分析我們可以最初步的了解到...
    沒有夢想_何必遠(yuǎn)方閱讀 344評論 0 2
  • 深入理解傅里葉變換Mar 12, 2017 這原本是我在知乎上對傅立葉變換缠劝、拉普拉斯變換潮梯、Z變換的聯(lián)系骗灶?為什么要進(jìn)...
    價(jià)值趨勢技術(shù)派閱讀 5,768評論 2 2
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程惨恭,因...
    小菜c閱讀 6,451評論 0 17
  • 雪,下大了耙旦。 一片脱羡,一片,白茫茫一片免都,它們像一團(tuán)團(tuán)棉絮锉罐,穿過我的頭發(fā),穿過我的手掌绕娘,沒有觸覺脓规,沒有溫度,沒有想象之...
    田禹治閱讀 1,124評論 3 19
  • 我叫李靈兒险领,是一名剛畢業(yè)的大學(xué)生從小的夢想就是做一名空姐侨舆,可往往天不進(jìn)人意。我畢業(yè)以后沒有被機(jī)場錄用而...
    頭鳳閱讀 164評論 1 0