在說Xcode自帶測試方法前先講下程序在內(nèi)存中的空間劃分, 一般可分為5個(gè)部分:
#1. BSS段, 存放未初始化的全局變量.?BSS是英文Block Started by Symbol的簡稱。BSS段屬于靜態(tài)內(nèi)存分配。
#2. 數(shù)據(jù)段, 存放已初始化的全局變量和全局靜態(tài)變量.?數(shù)據(jù)段屬于靜態(tài)內(nèi)存分配
#3. 代碼段, 存放程序執(zhí)行代碼
#4. 堆 ? ? ?, 存放進(jìn)程中被動(dòng)態(tài)分配的內(nèi)存段.
#5. 棧 ? ? ?, 存放函數(shù)的參數(shù)值和局部變量, 由編譯器自動(dòng)分配和釋放.
常說的內(nèi)存管理是對(duì)堆內(nèi)存的管理.
內(nèi)存泄露指動(dòng)態(tài)分配開辟出來的空間, 在使用完畢后未釋放, 或者未被回收直至程序結(jié)束.
Xcode自帶有一套測試工具
Analyze - 靜態(tài)分析
如下圖位置:

會(huì)自動(dòng)檢查代碼中是否有以下錯(cuò)誤:
#1. 是否創(chuàng)建了一個(gè)對(duì)象, 但并沒有使用它
#2. 是否創(chuàng)建了一個(gè)對(duì)象或者指針, 對(duì)其初始化后卻一直沒有讀取過
#3. 是否調(diào)用的讓某個(gè)對(duì)象引用計(jì)數(shù)加1的方法, 卻沒有調(diào)用引用計(jì)數(shù)減1的方法
#4. 是否有錯(cuò)誤返回類型.
運(yùn)行后如果檢查到有上述錯(cuò)誤, 會(huì)有藍(lán)色的提示, 如圖

下面再就是常用的Instruments, 使用前注意要把xocde運(yùn)行模式改為release
打開Instruments是選擇上面第一張圖中的Profile, 包含以下測試功能:

我們介紹下常用的Instruments三杰:
Leaks - 內(nèi)存泄露檢查
這樣一般如果有做過靜態(tài)檢查Analyze就比較少會(huì)出問題, 運(yùn)行的截圖:
打開后手機(jī)運(yùn)行可能會(huì)慢一些, 要盡量打開程序中的所有界面檢查下. 如果有內(nèi)存泄露的話會(huì)在Leak check那一行出現(xiàn)x的符號(hào)
點(diǎn)擊x符號(hào)能看到詳細(xì)錯(cuò)誤信息

Allocations - 內(nèi)存分配檢查
界面如下圖

Time Profile - 運(yùn)行耗時(shí)檢查
能查看各個(gè)耗時(shí)的項(xiàng)目, 對(duì)于耗時(shí)較多的項(xiàng)目可以雙擊耗時(shí)項(xiàng)目直接定位到代碼

點(diǎn)開可能定位到代碼, 下圖中顯示的301x標(biāo)識(shí)這段代碼運(yùn)行耗時(shí)301ms, 如果有較耗時(shí)的代碼就需要進(jìn)行優(yōu)化

上面是Xcode自帶的一些檢查工具, 但最重要的還是要自己多注意代碼規(guī)范?