通常大家都怎么对待编译 warning 和 Analyze 报告的错误? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
Elfe
V2EX    iDev

通常大家都怎么对待编译 warning 和 Analyze 报告的错误?

  •  
  •   Elfe 2012-06-03 23:16:39 +08:00 4992 次点击
    这是一个创建于 4926 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我刚开始参与的这个项目,有100个编译warning和97个Analyze错误。目前我收到一个很没头绪的任务:来,把这些不能稳定重现的闪退问题都来研究一下吧。
    晕。我一没有repro steps,二不熟产品代码,三就连iPhone开发也是新手,给我这种任务,也太瞧得起人了吧。
    按以前的习惯,肯定是要把所有的编译和Analyze错误都给清空再说。不过,不想贸贸然对别人的代码进行很多改动,所以想先打听一下:在iOS开发中,大家都把这些警告、错误当回事么?
    另外就是:估摸着这些闪退就是某些对象被提前释放了。在iOS开发中,除了打开Zombie Objects外,还有什么有效的手段或工具么?
    12 条回复    1970-01-01 08:00:00 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       2012-06-03 23:22:30 +08:00
    起步时间越早,规模越大的 codebase,在最新版本的 Xcode 中的各种 warning 就会越多

    如果不会造成 crash 的话,还是可以安全忽略的。
    Elfe
        2
    Elfe  
    OP
       2012-06-03 23:27:46 +08:00
    @Livid 那对于 Analyze 报告的问题呢?
    目测,大量 warning 还是无关紧要的,Analyze 上的可能有些确实是 crash 的元凶。
    另:有没有 suppress 某一特定 warning 的方法?这样就可以把那些安全的确实有理的 warning 给压制了让它们别在警告栏中出现。
    Livid
        3
    Livid  
    MOD
    PRO
       2012-06-04 00:20:10 +08:00   1
    @Elfe Analyze 报告的 potential leak 确实需要看看,有的时候确实是 bug。
    sharkli
        4
    sharkli  
       2012-06-04 08:17:30 +08:00   1
    崩溃的原因大多是收到内存warnning没有处理。你使用模拟器的模拟内存警告,把每个界面测试一下。收到内存警告如何处理,查下文档。个人经验仅供参考。
    adow
        5
    adow  
       2012-06-04 10:30:06 +08:00   1
    如果清楚的知道warning 的原因有些是可以忽略,analyze里很多都是potential leak确实需要仔细分析,在内存警告的时候很有可能就爆发出来了。
    shinyzhu
        6
    shinyzhu  
       2012-06-04 11:07:51 +08:00
    我有强迫症

    写好一个代码块/功能之后会主动跑一下Analyze,有提示就解决掉。

    到后来基本上没有Analyze的警告了。
    leafduo
        7
    leafduo  
       2012-06-04 14:00:13 +08:00
    我是废死力也要干掉全部警告的那种。

    最近一个 LaTeX 警告总搞不定让我很抑郁 = =
    xuming
        8
    xuming  
       2012-06-04 14:04:36 +08:00   1
    自己写的代码里的warning和error肯定要清除的,第三方的代码,就看情况了,一般warning问题不大的。
    Elfe
        9
    Elfe  
    OP
       2012-06-04 22:53:39 +08:00
    @adow iOS 代码里如何忽略某一具体警告?我是指忽略某一特定规则针对某一行/段特定代码的警告。同样这条规则在其它代码中的不要 suppress,同一段代码中其它规则检查的警告也不要 suppress。
    adow
        10
    adow  
       2012-06-05 11:21:53 +08:00
    @Elfe 我不知道是否有特定规则,比如在我的一个不大的项目里,有两处warning,有一处是因为我调用了UITextView的一个非公开的styleString方法,编译的时候提示'UITextView' may not respond to 'styleString',我想是因为styleString非公开的所以才提示这个,但是运行的时候他起作用了,也通过了app store审核。还有一处是我在实现单实例模式时候时在release方法中写成了:
    -(void)release{
    return;
    }
    他希望我先调用一下[super release],所以给我warning.
    我的意思是,我知道这两处warning的原因,也知道会产生的后果,所以我可以忽略。
    我的项目中还有两处analyze的警告,都是Potential leak of an object allocated,他们在我使用的第三方的MTStatusBarOverlay.m里,我不想去改他,我在instruments里运行了一段时间也没看到那个泄露,所以我也忽略了他。
    Elfe
        11
    Elfe  
    OP
       2012-06-05 13:34:26 +08:00   1
    @adow 我的意思是让可以安全忽略的警告不要在左边窗口中显示出来。
    在C#中是这样的:对于可以忽略的警告,可以在方法/属性/类/全局的范围添加一句
    [SuppressMessage rule="[the rule ID e.g. CA001]" justification="[the reason why choose to ignore the error here]"]
    这样在编译的时候我就不会再看到这条错误。
    这么做有两个好处:
    1,我可以强制 treat warning as error,从而从流程提升整个团队代码的质量
    2,对于那些可以安全忽视的警告,我只需要思考一次就够。不至于在今后每次编译的时候我都要检查一下是不是多了几个警告,还得仔细找出多了哪几个
    adow
        12
    adow  
       2012-06-05 14:29:05 +08:00
    原来还可以这样,我从来没想到过
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2554 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:23 PVG 12:23 LAX 20:23 JFK 23:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86