iOS Xcode使用Analyze靜態(tài)分析后可能出現(xiàn)的問題總結(jié)

最近在使用Analyze分析一個老項目中的代碼時林艘,發(fā)現(xiàn)了很多問題。感覺其中有的問題本不該出現(xiàn)宪塔,當(dāng)然有些問題也需要在今后的開發(fā)中多注意。現(xiàn)將遇到的相關(guān)錯誤信息總結(jié)如下囊拜。

一某筐、Core Foundation/Objective-C(CF/OC語法)

1、The 'viewWillAppear:' instance method in UIViewController subclass 'xxx' is missing a [super viewWillAppear:] call

解釋:UIViewController子類'xxx'中的'viewWillAppear:'實例方法缺少[super viewWillAppear:]調(diào)用冠跷。
分析:viewWillAppear中加上[super viewWillAppear:]即可南誊。

2、Instance variable used while 'self' is not set to the result of '[(super or self) init…]'

解釋:'self'時使用的實例變量未設(shè)置為'[(super或self)init ...]的結(jié)果蜜托。
分析:改成如下即可:

    self = [super initWithFrame:frame];
    if (self) {
    }

二抄囚、Dead store(未使用的變量)

1、Value stored to 'xxx' is never read

解釋:永遠(yuǎn)不會讀取存儲到'xxx'的值橄务。
分析:變量沒有被使用幔托,刪除或注釋掉即可静暂。

2扒磁、Value stored to 'xxx' during its initialization is never read

解釋:永遠(yuǎn)不會讀取在初始化期間存儲到'xxx'的值。
分析:也就是說這個model你申請了兩塊內(nèi)存,導(dǎo)致其中一塊內(nèi)存沒有被使用鲫寄。即去掉初始化方法,直接賦值即可悦屏,如下:

ACMediaModel *model = _mediaArray[indexPath.row];

三绽族、Memory error(內(nèi)存錯誤)

1、nil passed to a callee that requires a non-null 1st parameter

解釋:nil傳遞給需要第一個參數(shù)非null的被調(diào)用者史煎。
分析:代碼中這里的plistPath是這樣初始化的:NSString *plistPath;且下面只有if判斷谦屑,沒有else,這會導(dǎo)致參數(shù)可能為空篇梭,最好給一個初始值或者使用if氢橙、else ifelse判斷很洋。我們再來看一下Xcode里顯示的分析過程:

可以發(fā)現(xiàn)充蓝,它的意思是說假設(shè)某個條件是false,就會出現(xiàn)上述的錯誤喉磁,所以說這是有潛在的隱患的谓苟。

2、nil returned from a method that is expected to return a non-null value

解釋:方法需要返回一個非空值协怒,即在不改返回空的地方返回空涝焙。
分析:這里是在cellForRowAtIndexPath方面里,只有else if 判斷沒有 else 判斷孕暇,這可能會導(dǎo)致cell為空仑撞,最好把else if 改成 else

四妖滔、Memory(Core Foundation/Objective-C)(CF/OC內(nèi)存)

1隧哮、Potential leak of an object stored into ‘xx’

我們可以具體看一下Xcode的提示信息:

點(diǎn)擊第二步:
點(diǎn)擊第三步:

解釋:存在xx中的對象有潛在的泄漏。
分析:這里的String類型轉(zhuǎn)CFString類型有問題座舍,應(yīng)當(dāng)在最后對string1進(jìn)行一次CFRelease沮翔,或者使用如下方法轉(zhuǎn)換:

    CFStringRef string1 = (__bridge CFStringRef)str;
    CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, string1);
2、Incorrect decrement of the reference count of an object that is not owned at this point by the caller

解釋:調(diào)用者此時不擁有的對象的引用計數(shù)的不正確的減少曲秉;引用計數(shù)問題采蚀。
分析:例如在上面的場景中,使用橋接之后承二,如果還在最后對string1調(diào)用CFRelease方法就會出現(xiàn)上述錯誤榆鼠,由于__bridge用于Objective-CCore Foundation指針之間的轉(zhuǎn)換,這種轉(zhuǎn)換不會更換對象的所有權(quán)亥鸠,所以無需使用調(diào)用CFRelease方法妆够。

3、Potential leak of an object of type xx

解釋:xx類型的對象存在潛在的泄漏。

五责静、Logic error(邏輯錯誤)

1袁滥、Property of mutable type 'xxx' has 'copy' attribute; an immutable object will be stored instead

解釋:對可變類型使用copy修飾,將存儲不可變對象灾螃。
分析:對可變對象使用copy修飾的時候题翻,可變對象將變成不可變對象。雖然編譯不會報錯腰鬼,但是如果對其進(jìn)行可變的相關(guān)操作就會造成crash嵌赠。

2、Converting a pointer value of type 'NSNumber *' to a primitive boolean value; instead, either compare the pointer to nil or call -boolValue

解釋:將類型為“NSNumber *”的指針值轉(zhuǎn)換為原始布爾值熄赡;相反姜挺,要么將指針與nil進(jìn)行比較,要么調(diào)用-boolValue彼硫。
分析:使用NSNumber作為判斷條件的時候沒有指定類型炊豪,編譯器不知道怎么判斷;將這個值與nil比較拧篮。

3词渤、function call argument is an uninitialized value

解釋:函數(shù)調(diào)用參數(shù)是未初始化的值。
分析:textSize一個初始值串绩,如下:

CGSize textSize = CGSizeZero;
4缺虐、The right operand of '-' is a garbage value

解釋: '-'的右操作數(shù)是垃圾值。
分析:同上礁凡,給textSize一個初始值高氮。

六、API Misuse(Apple)(API調(diào)用錯誤)

1顷牌、Argument to 'NSMutableArray' method 'addObject:' cannot be nil

解釋:'NSMutableArray'方法'addObject:'的參數(shù)不能為空剪芍。
分析:最好給參數(shù)一個初始值或者默認(rèn)值,同時在設(shè)置的時候做一個防空的判斷窟蓝。

2紊浩、Dictionary value cannot be nil

解釋:字典里的值不能為空。
分析:同上疗锐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市费彼,隨后出現(xiàn)的幾起案子滑臊,更是在濱河造成了極大的恐慌,老刑警劉巖箍铲,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雇卷,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)关划,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門小染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贮折,你說我怎么就攤上這事裤翩。” “怎么了调榄?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵踊赠,是天一觀的道長。 經(jīng)常有香客問我每庆,道長筐带,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任缤灵,我火速辦了婚禮伦籍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腮出。我一直安慰自己帖鸦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布利诺。 她就那樣靜靜地躺著富蓄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慢逾。 梳的紋絲不亂的頭發(fā)上立倍,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音侣滩,去河邊找鬼口注。 笑死,一個胖子當(dāng)著我的面吹牛君珠,可吹牛的內(nèi)容都是我干的寝志。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼策添,長吁一口氣:“原來是場噩夢啊……” “哼材部!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唯竹,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤乐导,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浸颓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體物臂,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旺拉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棵磷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾狗。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仪媒,靈堂內(nèi)的尸體忽然破棺而出沉桌,到底是詐尸還是另有隱情,我是刑警寧澤规丽,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布蒲牧,位于F島的核電站,受9級特大地震影響赌莺,放射性物質(zhì)發(fā)生泄漏冰抢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一艘狭、第九天 我趴在偏房一處隱蔽的房頂上張望挎扰。 院中可真熱鬧,春花似錦巢音、人聲如沸遵倦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梧躺。三九已至,卻和暖如春傲绣,著一層夾襖步出監(jiān)牢的瞬間掠哥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工秃诵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留续搀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓菠净,卻偏偏與公主長得像禁舷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毅往,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容