性能優(yōu)化

啟動(dòng)性能分析

Mach-o

Mach-o文件的類型:

Mach的結(jié)構(gòu)

1:Header
2:Load Commands
3:data

新建項(xiàng)目,在ViewController里面實(shí)現(xiàn)+load方法,打斷點(diǎn),在main里面打斷點(diǎn)。發(fā)現(xiàn)先走的是+load方法,斷點(diǎn)前有很多棧信息 其中有_dyld_start

分析dyld,dyld是什么?
dyld -> dynamic loader 動(dòng)態(tài)加載器
當(dāng)系統(tǒng)吧dyld加到App進(jìn)程后dyld的操作過程:
dyld -> load dylibs -> rebase -> bind -> Objc -> 其他初始化

優(yōu)化之前要測量一下啟動(dòng)時(shí)間

  • main函數(shù)之前的消耗時(shí)間的測量:添加一個(gè)環(huán)境變量就可以在控制臺(tái)將這個(gè)時(shí)間的數(shù)據(jù)打印出來。


    image.png

動(dòng)態(tài)庫對(duì)App啟動(dòng)時(shí)間影響的實(shí)測
http://www.cocoachina.com/ios/20161125/18179.html

  • main函數(shù)之后的測量:
    利用CFAbsoluteTimeGetCurrent() 獲取時(shí)間




    可以得到main之后的時(shí)間

啟動(dòng)時(shí)間優(yōu)化的方向:

  • 耗時(shí)操作要進(jìn)行異步處理
  • loading的廣告要做緩存
  • 減少root頁面viewdidload和viewwillappear里面的操作
  • 未使用的動(dòng)態(tài)庫及時(shí)清理掉

內(nèi)存優(yōu)化

如何檢測內(nèi)存方面的問題?

遇到EXC_BAD_ACCESS崩潰的時(shí)候,一般就是出現(xiàn)野指針的時(shí)候。我們開啟僵尸對(duì)象檢測就可以找到僵尸對(duì)象。
開啟步驟:Product->Scheme->Edit Scheme->Diagnostics->勾選Zombie Objects
開啟之后再運(yùn)行,控制臺(tái)會(huì)給出一些信息。從信息中可以分析出僵尸對(duì)象。



這里說明對(duì)象已經(jīng)被釋放了,還依然被使用。

assign與weak,它們都是弱引用類型,最大的區(qū)別是什么?
weak 聲明的變量對(duì)象釋放后,制動(dòng)賦值為nil
assign聲明的變量對(duì)象釋放后,不會(huì)自動(dòng)賦值為nil,會(huì)造成野指針錯(cuò)誤。

內(nèi)存泄漏的檢測方法

  1. 靜態(tài)檢測方法
    1)手動(dòng)內(nèi)存檢測 shift+command+B
    2)自動(dòng)內(nèi)存檢測 buildSetting -> Analyze during Build -> YES
  2. 動(dòng)態(tài)檢測方法
    instruments 打開方式 product -> profile
  3. 析構(gòu)方法(打印dealloc,看看是否調(diào)用了)
  4. 第三方內(nèi)存檢測工具
    MLeaksFinder 不需要做任何操作 pod進(jìn)去就可以使用了。原理就是runtime實(shí)現(xiàn)的。


    instruments 工作流程
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)! 問題種類 時(shí)間復(fù)雜度 在集合里數(shù)據(jù)量小的情況下時(shí)間復(fù)雜度對(duì)于性能的影響看起來微乎其微。但...
    C9090閱讀 1,024評(píng)論 0 1
  • 本文首發(fā)個(gè)人博客:iOS App 啟動(dòng)性能優(yōu)化 應(yīng)用啟動(dòng)時(shí)間,直接影響用戶對(duì)一款應(yīng)用的判斷和使用體驗(yàn)。ZAKER新...
    Chars閱讀 2,271評(píng)論 1 11
  • 如何優(yōu)化iOS App的啟動(dòng)性能 第一部分科普了一些和App啟動(dòng)性能相關(guān)的前置知識(shí)第二部分主要講如何定制啟動(dòng)性能的...
    百事小武閱讀 701評(píng)論 0 2
  • 在 Java 中,內(nèi)存的分配是由程序完成的,而內(nèi)存的釋放則是由 Garbage Collecation(GC) 完...
    Shawn_Dut閱讀 6,145評(píng)論 3 28
  • Java性能問題一直困擾著廣大程序員,由于平臺(tái)復(fù)雜性,要定位問題,找出其根源確實(shí)很難。隨著10多年Java平臺(tái)的改...
    程序員技術(shù)圈閱讀 4,959評(píng)論 0 65

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