內存分析(Analyze)

一. 靜態(tài)內存分析

  1. 所謂靜態(tài)內存分析, 是指在程序沒運行的時候, 通過工具對代碼直接進行分析

    • 根據代碼的上下文的語法結構, 讓編譯器分析內存情況, 檢查是否有內存泄露
  2. 作用

    • 邏輯錯誤: 訪問未初始化的變量或者野指針
    • 聲明錯誤: 聲明了一個對象, 但是從未使用過
    • 內存管理錯誤: 內存泄露
    • 缺點: 靜態(tài)內存分析由于是編譯器根據代碼進行的判斷, 做出的判斷不一定會準確, 因此如果遇到提示, 應該去結合代碼上文檢查一下
  3. OC中的靜態(tài)內存分析:

    • 曾經在MRC環(huán)境下, OC的代碼需要手動管理內存, 任何對象的引用, 都要伴隨一次release操作, 否則很容易發(fā)生內存泄露, 因此在MRC環(huán)境下, 使用靜態(tài)內存分析很有必要
    • 而在目前的ARC環(huán)境下, 很少會發(fā)生內存泄露, 但是也會有很少數(shù)的情況導致內存泄露
      • 如Foundation對象與CoreFoundation對象的相互轉化, CoreFoundation對象享用ARC機制, 所以容易發(fā)生內存泄露
  4. Swift的靜態(tài)內存分析

    • Swift中, 使用了類型重映射機制, 他可以將對象轉換成能夠自動管理內存的對象, 不需要我們手動釋放, 因此Swift在內存管理方面更為安全

二. 內存分配

  1. 作用

    • 查看當前運行情況的內存分配
    • 查看使用過的內存有沒有釋放掉
  2. 關于App中加載圖片的注意點

    • -imageNamed:

      • 該方法用于加載小圖片/使用頻率高的圖片

      • 此方法加載過得圖片, 在App運行期間, 始終會保有緩存, 這個緩存是由系統(tǒng)管理的, 無法通過代碼銷毀緩存

      • 當系統(tǒng)察覺到內存消耗過高, 就會自動釋放這部分內存

          Search for an object whose name was set explicitly using the setName: method and currently resides in the image cache.
          該方法首先會從圖片內存中查找
          Search the app's main bundle for a file whose name matches the specified string. 
          如果沒有找到, 就在App的mainBundle中查找
          Search the Application Kit framework for a shared image with the specified name.
          如果bundle中也沒有, 就會去framework的庫中尋找
        
    • -imageWithContentsOfFile:

      • 該方法用于加載大圖片/使用率較低的圖片
      • 它只是加載一次圖片, 并且不會做緩存, 當對象釋放的時候, 內存也就被釋放掉了
      • 因此對于不常用的圖片應該使用這個方法
  3. 圖片在沙盒中的存在形式

    1. 如果當前項目部署版本 <= 6.x: 那么所有圖片就會直接暴露在沙盒的資源包中(main bundle), 不會進行壓縮為Assets.car文件
    2. 如果當前項目部署版本 >= 7.x
      • 放在Images.xcassets中的所有圖片, 都會被壓縮為Assets.car文件, 不會直接暴露在沙盒的資源包中
      • 而沒有放在Images.xcassets的圖片, 會直接暴露在沙盒的資源包中
    3. 使用對比
      • 壓縮為Assets.car的文件:
        • 這些圖片不會暴露在外, 但是無法或得到這些圖片的路徑, 只能通過圖片名-imageName來加載圖片, 并且會產生緩存
        • 小圖片/使用頻率高, 放在image.xcassets中
      • 未壓縮的圖片:
        • 圖片暴露在外, 可以通過imageWithContentOfFile來獲得圖片的路徑, 不會有緩存
        • 大圖片/使用頻率低, 如新特性界面, 放在外面
  4. 補充一個獲取car中圖片的方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夕吻,隨后出現(xiàn)的幾起案子瑰钮,更是在濱河造成了極大的恐慌拙徽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤底,死亡現(xiàn)場離奇詭異潦蝇,居然都是意外死亡,警方通過查閱死者的電腦和手機产阱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門婉称,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人构蹬,你說我怎么就攤上這事王暗。” “怎么了庄敛?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵俗壹,是天一觀的道長。 經常有香客問我藻烤,道長绷雏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任怖亭,我火速辦了婚禮涎显,結果婚禮上,老公的妹妹穿的比我還像新娘兴猩。我一直安慰自己期吓,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布倾芝。 她就那樣靜靜地躺著讨勤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛀醉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天衅码,我揣著相機與錄音拯刁,去河邊找鬼。 笑死逝段,一個胖子當著我的面吹牛垛玻,可吹牛的內容都是我干的。 我是一名探鬼主播奶躯,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帚桩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘹黔?” 一聲冷哼從身側響起账嚎,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤莫瞬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后郭蕉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疼邀,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年召锈,在試婚紗的時候發(fā)現(xiàn)自己被綠了旁振。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涨岁,死狀恐怖拐袜,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情梢薪,我是刑警寧澤蹬铺,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站沮尿,受9級特大地震影響丛塌,放射性物質發(fā)生泄漏。R本人自食惡果不足惜畜疾,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一赴邻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啡捶,春花似錦姥敛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至了赌,卻和暖如春墨榄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勿她。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工袄秩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逢并。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓之剧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砍聊。 傳聞我的和親對象是個殘疾皇子背稼,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容

  • 三類工具 基礎工具(NSLog的方式記錄運行時間) 性能工具,檢測各個部分的性能表現(xiàn)玻蝌,找出性能瓶頸 內存工具蟹肘,檢查...
    彭磊PL閱讀 769評論 0 0
  • 內存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應用出現(xiàn)內存泄漏的問題词疼。內存泄漏大家都不陌生了,簡單粗俗的講疆前,...
    宇宙只有巴掌大閱讀 2,363評論 0 12
  • //聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄 一.內存分析 1.靜態(tài)分析(Analyze) 不運...
    石虎132閱讀 1,739評論 0 6
  • 基本概念 Java作為一種面向對象語言寒跳。支持以下基本概念: 多態(tài) 繼承 封裝 抽象 類 對象 實例-方法 重載 對...
    我是老薛閱讀 358評論 0 0
  • 第一屏 自書拙作 次韻王之渙涼州詞 天馬逐雀白云間 一座新城萬仞山 羌笛何須怨楊柳 滿城青翠接玉關 其二 雨中吟涼...
    肖龍飛飛閱讀 454評論 7 12