OCLint官方规则文档中文说明

本文基于OClint官方文档进行翻译,本章顺序与官网相同,如果查看后仍不能明白问题原因,请前往官方文档查看示例,官方文档地址

Basic

1.Bitwise operator in conditional

说明:对于按位与或者按位或的情况,OClint认为这不便于理解。

2.Broken Nil Check

说明:nil检查,在某些情况会返回相反的结果

3.Broken Null Check

说明:NULL检查会导致程序crash

4.Broken Oddness Check

说明:X%2==1对负数不起作用,需要使用X&1 ==1或者X%2!=0来代替

5.collapsible if statements

说明:判断两个相连的if是否能够合并

6.Constant Conditional Operator

说明:条件是否永远为true或者永远false?

7. constant if expression

说明:if判断中的值是恒定的,比如if(true),其中的值永远为真。

8.dead code

说明:表示标示位置有永远不会被执行的代码。

9.Double Negative

说明:表示不需要使用双重否定,形如!!1,~~1等,因为这并没有用处。

10.ForLoop Should Be WhileLoop

说明:表示此处不应该用for循环而应该使用while循环。

10.Goto Statement

说明:提示谨慎使用Goto语句。

11.Jumbled Incrementer

说明:混乱的增量,多数出现在嵌套for循环中,如果不是因为笔误写错了,那么这种混乱的写法容易造成代码阅读的问题。

12.Misplaced Null Check

说明:Null Check被放错地方,在OC中向一个空指针发送消息并不会发生什么,但是在C或者C++中可能会引起crash,同时可能会造成代码阅读的困惑。

13.Multiple Unary Operator

说明:多重一元操作很难被理解。形如:int b = -(+(!(~1)));)

14.Return From Finally Block

说明:在最后一个block中return的做法是不推荐的。

15.Throw Exception From Finally Block

说明:不要在最后一个BLOCK中抛出异常,因为这样的情况可能会掩盖其他异常或者代码缺陷。

Cocoa(OC)

1.Must Override Hash With IsEqual

说明:如果重写isEqual,一定也要重写hash,原名为ObjCVerifyIsEqualHash。

2.Must Call Super

说明:提示需要增加call super的情况,例如layoutSubviews方法,需要添加[super layoutSubviews].

3.Verify Prohibited Call

说明:当一个方法声明时含有attribute((annotate("oclint:enforce[prohibited call]"))),它的所有调用都是被禁止的。

4.Verify Protected Method

说明:当一个方法声明含有attribute((annotate("oclint:enforce[protected method]")))时,只有它和它的子类可以调用,因为OC中没有Protected,可以用这种方式达到Protected效果。

5.Subclass Must Implement

说明:子类必须实现,哪怕是一个抽象方法。

Convention

1.Avoid Branching Statement As Last InLoop

说明:表示不要在for循环或者其他循环语句的末尾使用break.

2.Base Class Destructor Should Be Virtual Or Protected

说明:基类的析构函数要么是公共的虚函数,要么是保护性的非虚函数。

3.covered switch statements dont need default

说明:因为已经覆盖了所有的switch分支,所以不需要写default break部分。

4.Default Label Not Last In Switch Statement

说明:DeFault没有放在Switch的最后一行。

5.Destructor Of VirtualClass

说明:本规则强制要求虚类的析构函数必须也是虚函数。

6.Inverted Logic

说明:反转逻辑让人难以理解。一般是指用(!a)而非(a)来判断让人难以理解。

7.Missing Break In Switch Statement

说明:在Switch中如果缺少break很容易引入bug.

8.Non Case Label In Switch Statement

说明:不要把label放到switch中。

9.ivar assignment outside accessors or init

说明:意思是某些成员的初始化不在getter/setter或者init中,而在其他位置。

10.parameter reassignment

说明:通常认为是赋值问题,具体问题需要具体判断,有的时候是因为对传来的参数进行了重新赋值,大多数时候不能修改。

11.use early exits and continue

说明:意思是,有其他出口时,先执行其他出口,再继续代码。

12.Switch Statements Should Have Default

说明:如果并不是每一个分支都有一条路径,那么switch重必须含有default.

13.Too Few Branches In Switch Statement

说明:Switch中分支很少,可以用if代替。

Design

1.Avoid Default Arguments On Virtual Methods

说明:避免给虚函数设置默认参数,给虚函数设置默认参数会破坏多样性和引起不必要的层次结构发杂性。

2.Avoid Private Static Members

说明:避免使用私有静态成员,静态成员很容易破换封装性。

Empty

1.Empty Catch Statement

说明:主要发生在一个异常exception被catch到了,但是却没有对此做任何操作。

2.Empty Do While Statement

说明:在do-while循环中没有做任何事情。

3.Empty Else Block

说明:在if中有操作,else中却是空的,此时else可以被安全移除。

4.Empty Finally Statemen

说明:在@finally中没有进行任何操作。

5.Empty For Statement

说明:for循环为空。

6.Empty If Statement

说明:if中代码为空。

7.Empty Switch Statement

说明:Switch中代码为空。

8.Empty Try Statement

说明:try中代码为空。

9.Empty While Statement

说明:While循环中没有代码。

Migration

1.Replace With Boxed Expression

说明:用来说明umberWithInt和stringWithUTF8String:getenv的简写形式。

2.Replace With Container Literal

说明:用来说明arrayWithObjects和dictionaryWithObjects的简写形式。

3.replace with number literal

说明:用来说明numberWithInt和numberWithBOOL的简写形式。

4.replace with object subscripting

说明:用来说明objectAtIndex和objectForKey的简写形式。

Naming

1.Long Variable Name

说明:命名太长。

2.Short Variable Name

说明:命名过短。

Redundant

1.Redundant Conditional Operator

说明:冗余的条件运算符,可以一步到位的判断,不需要进行多余比较。

2.Redundant If Statement

说明:if判断是多余的。

3.Redundant local variable

说明:return中的参数可以使用一个表达式来表示。

4.RedundantNilCheck

说明:在C或者C++中适用的判空检查在OC中是多余的。因为在OC中向空对象发送消息会返回false值。

5.UnnecessaryElseStatement

说明:如果if中已经带有return,则不需要写else语句。

6.Unnecessary Null Check For Dealloc

说明:在Dealloc中不需要判空,就能Delete元素。

7.useless parentheses

说明:用来表示有些括号是不必要的。

Size

1.High Cyclomatic Complexity

说明:圈复杂度过高。V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量,或者V(G)=区域数=判定节点数+1。

2.Long Class

说明:类行数太多。

3.Long Line

说明:一行字数过多。

4.Long Method

说明:在一个方法中试图完成很多事情,在一个方法中应该完成一个功能并把它做好。

5.High Ncss Method

说明:其实是指某个代码块中代码行数过多,查看代码块中代码是否能拆分,公共功能能否提供一个公共借口。

6.Deep Nested Block

说明:层次太深,多层嵌套。

7.High NPath Complexity

说明:NPath复杂度是一个方法中各种可能的执行路径总和,一般把200作为考虑降低复杂度的临界点,这里提示NPath复杂度过高。

8.Too Many Fields

说明:一个类中有太多的域表示它的东西太多了,需要进行适当的抽象。

9.Too Many Methods

说明:一个类中方法过多。

10.Too Many Parameters

说明:一个方法中参数过多。

Unused

1.Unused Local Variable

说明:没有被使用的局部变量。

2.Unused Method Parameter

说明:没有被使用的方法参数,请谨慎修改

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容