你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 用Xcode Analyze進行代碼靜態檢查以及一些常見問題釋疑

用Xcode Analyze進行代碼靜態檢查以及一些常見問題釋疑

編輯:IOS開發綜合

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?   
  1. [[NSMutableStringalloc]init]

    ->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?    
    1. @property(nonatomic,retain)NSMutableString*content;

      \

      解決方案:

      [plain]view plaincopyprint?     
      1. self.content=[[[NSMutableStringalloc]init]autorelease];

        2、無效數據監測(Dead store)

        無效數據如:Unused、Never read....
        3、邏輯錯誤監測(Logic error)

        \

        如上代碼,當Tag不等於1、2和3的時候,就會出現很問題了。len is agarbage value。建議在聲明變量時,同時進行初始化。

        目前筆者在使用Xcode Analyze時,只發現了以上3鐘錯誤,後面如有新的發現,再添加上!

         二、常見問題釋疑

        1,Debug和Release版本區別?

        眾所周知,我們進行iOS開發,在Xcode調試程序時,分為兩種方式,DebugRelease,在Target的Setting中相信大家應該看到很多選項都分為DebugRelease,方便我們分別設置,滿足調試和發布的不同需求。

        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版本,這裡可以很方便切換。

        2,Analyze的作用?

        剛開發時,始終不知道這個的作用,只知道要打包生成APP時,需要用這個,那麼到底Analyze和Release有什麼關系呢?

        \

        archive是你要上傳包的時候,打包。也就是說Archive只跟APP要上傳到appStore的時候有關,一般情況下,只有在那個時候才會用Archive,可以這麼理解。所以Archive也分為Debug和Release兩個,你可以Archive出一個Debug版本的應用也可以Archive出一個Release的應用。

        \

        所以說,Archive和Release沒有太大的關系,Archive我們平時一般都不會用到的。

         

        3,Profile

        \

        點擊運行Profile,profile 之後,會有一個工具選項. 然後你可以查看app 性能

        \

        4,Analyze

        analyze,是查找靜態內存洩漏,以前mrc 的時候會用。Profile和Analyze都可以在Scheme中設置:

        \

        總結:

        默認run,是debug模式,就是真機聯調.
        如果你修改為release,是run的時候,為發布模式.
        直接archive是系統提供幫助打包的,Archive生成後的文件會小很多~  
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved