參考
使用Xcode和Instruments調試解決iOS內存泄露
這裏我們來探索怎麼用instruments工具來提高你app性能和穩定性.
Instrument簡介
這將確保所有的面板都打開。現在,研究下面的截圖和它下面的每個部分的解釋:
1. 錄控按鈕。中間的紅色按鈕將停止與啓動它被點擊時,應用程序目前正在分析。注意這實際上是停止和啓動應用程序,而不是暫停它。 2. 運行定時器和運行導航,定時器顯示APP已經運行了多長時間,箭頭之間是可以移動的。如果停止,然後使用錄製按鈕重新啓動應用程序,這將開始一個新的運行。顯示屏便會顯示“run2 of 2”,你可以回到第一次運行的數據,首先你停止當前運行,然後按下左箭頭回去。 3. 運行軌道. 4. 擴展面板,在時間探查儀器的情況下,它是用來跟蹤顯示堆棧 5. 詳細地面板。它顯示了你正在使用的儀器的主要信息,這是使用頻率最高的部門,可以從它這裏看到cpu運行的時間 6. 選項面板 稍後介紹
重頭戲來了.
以下介紹下配置選項:
Separate by Thread: 每個線程應該分開考慮。只有這樣你才能揪出那些大量佔用CPU的"重"線程
Invert Call Tree: 從上倒下跟蹤堆棧,這意味着你看到的表中的方法,將已從第0幀開始取樣,這通常你是想要的,只有這樣你才能看到CPU中話費時間最深的方法.也就是說FuncA{FunB{FunC}} 勾選此項後堆棧以C->B-A 把調用層級最深的C顯示在最外面
Hide Missing Symbols: 如果dSYM無法找到你的app或者系統框架的話,那麼表中看不到方法名只能看到十六進制的數值,如果勾線此項可以隱藏這些符號,便於簡化數據
Hide System Libraries: 勾選此項你會顯示你app的代碼,這是非常有用的. 因爲通常你只關心cpu花在自己代碼上的時間不是系統上的
Show Obj-C Only: 只顯示oc代碼 ,如果你的程序是像OpenGl這樣的程序,不要勾選側向因爲他有可能是C++的
Flatten Recursion: 遞歸函數, 每個堆棧跟蹤一個條目
Top Functions: 一個函數花費的時間直接在該函數中的總和,以及在函數調用該函數所花費的時間的總時間。因此,如果函數A調用B,那麼A的時間報告在A花費的時間加上B.花費的時間,這非常真有用,因爲它可以讓你每次下到調用堆棧時挑最大的時間數字,歸零在你最耗時的方法。
Time Profile
- (void)runLoop
{
for (long i = 0; i < 10000; i++) {
NSLog(@"long int %ld", i);
}
}
Leaks
Cocoa Layout
(其實這裏寬度不需要)
加載的時候修改了按鈕的寬度限制self.width.constant = 200;