Xcode是一個非常強大的IDE,最近使用Xcode Analyze對代碼進行代碼靜態檢查,嘗到了不少甜頭。
在Xcode中提供了兩種工具幫助查找洩漏點:Analyze和Profile,Analyze是靜態分析工具可以通過菜單 Product→Analyze啟動,為靜態分析之後的代碼畫面;Profile是動態分析工具,這個工具叫“Instruments”,它是Xcode 集成在一起,可以在Xcode中通過菜單Product→Profile啟動,Instruments有很多Trace Template(跟蹤模板)可以動態分析和跟蹤內存、CPU和文件系統。這裡先介紹靜態檢查代碼:
一、靜態檢查代碼
運行Xcode Analyze方法
Product---->Analyze
1、可能存在的內存洩漏監測(Memory)
運行Analyze後,查看一處Memory警告,可以看到如下代碼:Potential leak of an object。
注意上面的代碼並不是L63行存在洩漏,我們點擊“Potential leak of an object”前面的箭頭,指示會出現一些變化,如下圖。
->1.Method returns an Objective-C object with a +1 retain count
alloc一個對象的時候,其內存計數內存計數(retain count)+1,
view plaincopyprint?->2.Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1
因為content的setter方發會將object的內存計數+1,如下代碼,content是retain屬性。執行完L62代碼後,self.content的內存計數就為 2
view plaincopyprint?解決方案:
[plain]view plaincopyprint?2、無效數據監測(Dead store)
無效數據如:Unused、Never read....
如上代碼,當Tag不等於1、2和3的時候,就會出現很問題了。len is agarbage value。建議在聲明變量時,同時進行初始化。
目前筆者在使用Xcode Analyze時,只發現了以上3鐘錯誤,後面如有新的發現,再添加上!
二、常見問題釋疑
眾所周知,我們進行iOS開發,在Xcode調試程序時,分為兩種方式,Debug和Release,在Target的Setting中相信大家應該看到很多選項都分為Debug和Release,方便我們分別設置,滿足調試和發布的不同需求。
Release是發行版本,比Debug版本有一些優化,文件比Debug文件小 Debug是調試版本,Debug和Release調用兩個不同的底層庫。通俗點講,我們開發者自己內部真機或模擬器調試時,使用Debug模式就好,等到想要發布時,也就是說需要大眾客戶使用時,需要build Release版本,具體區別如下:
一、Debug是調試版本,包括的程序信息更多
二、只有Debug版的程序才能設置斷點、單步執行、使用TRACE/ASSERT等調試輸出語句
三、Release不包含任何調試信息,所以體積小、運行速度快
那麼,問題來了,我們調試程序時,該如何生成(Build)或運行Debug或是Release版本呢?
Xcode左上角,點中項目名稱-Edit Scheme,或是菜單欄-Product-Scheme-Edit Scheme 彈出界面如下:
當你這裡設置Debug時,你build/Run後就是debug版本,相應的,修改成Release模式,出來的就是release版本,這裡可以很方便切換。
剛開發時,始終不知道這個的作用,只知道要打包生成APP時,需要用這個,那麼到底Analyze和Release有什麼關系呢?
archive是你要上傳包的時候,打包。也就是說Archive只跟APP要上傳到appStore的時候有關,一般情況下,只有在那個時候才會用Archive,可以這麼理解。所以Archive也分為Debug和Release兩個,你可以Archive出一個Debug版本的應用也可以Archive出一個Release的應用。
所以說,Archive和Release沒有太大的關系,Archive我們平時一般都不會用到的。
點擊運行Profile,profile 之後,會有一個工具選項. 然後你可以查看app 性能
analyze,是查找靜態內存洩漏,以前mrc 的時候會用。Profile和Analyze都可以在Scheme中設置:
總結:
默認run,是debug模式,就是真機聯調.