1. 程式人生 > >iOS開發之Xcode的靜態分析(Static Code Analysis)與常見記憶體隱患解決辦法

iOS開發之Xcode的靜態分析(Static Code Analysis)與常見記憶體隱患解決辦法

一.Xcode Analyze靜態分析 Static Code Analysis

Static Code Analysis(靜態程式碼分析)用來發現原始碼潛在的錯誤與缺陷,原始碼編譯後只有在執行時有可能會產生細微的錯誤,他們可能難以識別和修復,所以這些潛在的威脅在開發過程中一定要儘可能清理乾淨,儘量編寫的時候注意類似可能潛在的威脅與缺陷

二.可以識別的問題與缺陷

1.邏輯缺陷,如訪問未初始化的變數和空指標

2.記憶體管理的缺陷,如分配後的記憶體洩漏

3.無效資料(未使用的變數)缺陷

4.使用api缺陷,不遵循庫或者框架的使用規則

三.開啟方式

1.Xcode頂部選單Product-->Analyze即可開啟

2.長按Xcode的run執行箭頭選擇Analyze即可開啟

3.cmd + shift + b 快捷鍵開啟

四.使用方法

1.左側問題導航選擇某一條藍色警告分析

2.點選右側原始碼編輯器的藍色訊息體

3.檢視錯誤跟蹤線

4.編輯程式碼修改錯誤

五.常見問題缺陷與解決辦法

1.Passed-by-value struct argument contains uninitialized data (e.g., via the field chain: 'origin.x')

錯誤:

1234567-(UIView*)test{CGRect
rect;UIView*view=[[UIViewalloc]init];view.frame=rect;returnview;}

正確:

1 2 3 4 5 6 7 -(UIView*)test { CGRectrect=CGRectZero; UIView*view=[[UIViewalloc]init]; view.frame=rect; returnview; }

2.Value stored to 'array' during its initialization is never read

變數申請了記憶體並初始化,但沒有使用此變數,接著將此變數又重新賦值

錯誤:

123NSMutableArray*array=[NSMutableArrayarray];array=[responseObject objectForKey:@"result"];.....

正確:

1 2 NSMutableArray*array=[responseObject objectForKey:@"result"]; .....

3.Value stored to 'array' is never read

變數'array' 未被使用

1__unused NSMutableArray*array=@[@"1",@"2"];//使用__unused或者註釋掉

4. The 'viewWillAppear:' instance method in UIViewController subclass 'TempViewController' is missing a [super viewWillAppear:] call

錯誤

1 2 3 -(void)viewWillAppear:(BOOL)animated{ .... }

正確

1234-(void)viewWillAppear:(

相關推薦

iOS開發Xcode靜態分析(Static Code Analysis)常見記憶體隱患解決辦法

一.Xcode Analyze靜態分析 Static Code Analysis Static Code Analysis(靜態程式碼分析)用來發現原始碼潛在的錯誤與缺陷,原始碼編譯後只有在執行時有可能會產生細微的錯誤,他們可能難以識別和修復,所以這些潛在的威脅

iOS開發Xcode常用除錯技巧總結

轉載http://www.cocoachina.com/ios/20161102/17884.html   本文為投稿文章,作者:楊社兵 最近在面試,面試過程中問到了一些Xcode常用的除錯技巧問題。平常開發過程中用的還挺順手的,但你要突然讓我說,確實一臉懵逼。Debug的技巧

IOS開發Xcode下LLDB除錯技巧_Debug_更改BOOL型別的值

1.當在除錯中更改bool型別的值時,不能用NO和YES,要用true和false 2.如果有個字典userInfoDic {     avatar = "",     birthday = "

iOS開發Xcode自定義程式碼塊遷移

本文介紹了程式碼塊遷移的過程. 背景:由於最近換了新的mac,所以,要做自定義程式碼塊的遷移. 一.Xcode中的程式碼塊. 二.開啟 Finder,快捷鍵Command +

iOS開發JSON格式數據的生成解析

添加 json intern 對象 RM use convert mail value 我們為什麽要用JSON格式的數據? JSON格式取代了xml給網絡傳輸帶來了很大的便利,但是卻沒有了xml的一目了然,尤其是json數據很長的時候,我們會陷入繁瑣復雜的數據節點查找中。

iOS開發執行緒間的MachPort通訊子執行緒中的Notification轉發

如題,今天的部落格我們就來記錄一下iOS開發中使用MachPort來實現執行緒間的通訊,然後使用該知識點來轉發子執行緒中所發出的Notification。簡單的說,MachPort的工作方式其實是將NSMachPort的物件新增到一個執行緒所對應的RunLoop中,並給NSMachPort物件設定相應的代理。

iOS開發淺談MVVM的架構設計團隊協作

1 // 2 // NetRequestClass.m 3 // MVVMTest 4 // 5 // Created by 李澤魯 on 15/1/6. 6 // Copyright (c) 2015年 李澤魯. All rights reserved. 7

iOS開發關於Runtime執行時:類物件

Objective-C語言是一門動態語言,它將很多靜態語言在編譯和連結時期做的事放到了執行時來處理。這種動態語言的優勢在於:我們寫程式碼時更具靈活性,如我們可以把訊息轉發給我們想要的物件,或者隨意交換一個方法的實現等。 這種特性意味著Objective-C不僅需要一個編譯器,還需要一個執行時系統

ios開發 -- 呼叫系統定位獲取當前經緯度地理資訊

在info.plist中加入: //允許在前臺使用時獲取GPS的描述 定位許可權:Privacy - Location When In Use Usage Description  //允許永久使用GPS描述 定位許可權: Privacy - Location A

iOS開發多圖片無縫滾動元件封裝使用

正兒八經的圖片滾動的Demo我這兒還真沒有,今天呢就封裝一個可以在專案中直接使用的圖片輪播。沒看過其他iOS圖片無限輪播的程式碼,也不瞭解他們的原理,我今天封裝這個圖片無限輪播是借鑑Web前端中的做法,因為之前寫Web前端的時候,實現幻燈片就是這麼做的,今天就在iPhon

iOS 開發 FMDB 源碼分析

lob nts st2 current pan mask 數據庫操作 數據庫 nbsp   概念:   FMDB 是用於數據存儲的框架,它是 iOS 平臺下對 SQLite 數據庫的封裝。FMDB 是面向對象的,它以 OC 的方式封裝了 SQLite 的 C 語言 API,

iOS開發MAC的記憶體清理,Xcode清理

此文章僅適用於適用於使用Xcode的開發者。 長期不清理Xcode中的一些檔案你會發現自己的mac硬碟越來越小,而且是這個其他佔了絕大部分的硬碟,在網上搜索了很多辦法都沒找到如何清理這些其他 後來來來回回在資料夾中找發現~/Library/Developer/Xcode這個Xcode資料夾大的驚

iOS開發如何關閉Xcode控制檯的所有輸出

一執行工程發現控制檯輸出一大堆內容,怎麼把它關掉呢。 1.原始的列印資料包括xcode列印的,第三方庫的,還有自己寫的 2.通過在pch裡,巨集定義把NSLog替換後發現少了很多自己寫的列印 #define NSLog(...) //NSLog(__VA_ARGS_

Xcode工程編譯錯誤iOS開發Xcode9報錯 Compiling IB documents for earlier than iOS7 is no longer supported.

概要:   在我們升級到Xcode9時,最低的編譯版本為iOS8,但是在使用一些SDK的時候就會報出Compiling IB documents for earlier than iOS7 is no longer supported. 這句錯誤,這個時候我們點選錯誤跳轉到Xib或Storyboard中隨後

iOS開發統計Xcode工程的程式碼行數

1.開啟終端,用cd命令 定位到工程所在的目錄,如果需要統計某個資料夾的程式碼行數,則cd到當前資料夾下 2.呼叫以下命名即可把每個原始碼檔案行數及總數統計出來 find . "(" -name "

iOS開發蝦米音樂頻道選擇切換效果分析實現

今天部落格的內容比較簡單,就是看一下蝦米音樂首頁中頻道選擇的一個動畫效果的實現。之前用mask寫過另外一種Tab切換的一種效果,網易雲音樂裡邊的一種Tab切換效果,詳情請移步於""。,下面會對效果進行分析,並且根據自己的理解去實現一個類似的頻道選擇切換效果。程式碼會在Github上進行分享,Demo實現時依然

iOS開發多種Cell高度自適應實現方案的UI流暢度分析

本篇部落格的主題是關於UI操作流暢度優化的一篇部落格,我們以TableView中填充多個根據內容自適應高度的Cell來作為本篇部落格的使用場景。當然Cell高度的自適應網上的解決方案是鋪天蓋地呢,今天我們的重點不是如何討論Cell高度的自適應,而是給出幾種Cell高度自適應的解決方案,然後對比起UI流暢度,從

ios開發靜態庫(.a)的生成及使用

一、靜態庫定義:         在應用中,有些公共的程式碼需要反覆使用 的程式碼,希望隱藏程式碼的具體實現,可以把這部分程式碼做出靜態庫(.a檔案);如果提供庫的原始碼稱為開源庫(能看見.h也能看見.m檔案),不提供原始碼的庫稱為閉源庫(靜態庫,動態庫) 二、靜態庫的特

iOS開發Crash日誌獲取分析

當在非除錯狀態下,我們用真機測試app,crash或者說閃退是一件很常見的事,最讓我們開發人員頭疼的是,自己在開發過程中總是不會遇到crash,安裝到別人的裝置,就出現了閃退崩潰現象。這種偶現的、概率比較低的閃退是最令人頭疼。 這時iOS crash log 

iOS開發靜態庫(三)—— 圖片、介面xib等資原始檔封裝到.a靜態

轉自:https://blog.csdn.net/mylizh/article/details/38707175編譯環境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3)一、首先將資原始檔打包成bundle新建