[OCLint]OCLint代码检查规则

本文介绍了OCLint 0.10.2中的67条代码检查规则,涵盖基本、Cocoa、惯例、空、迁移、命名、冗余、尺寸和未使用等类别,旨在提升代码质量和遵循最佳实践。内容包括各种错误检查,如空语句、命名规范、冗余条件、未使用变量等,并提供链接以获取更多规则详情。
摘要由CSDN通过智能技术生成

OCLint 0.10.2 包含67条规则

Basic(基本)

  • BitWiseOperationInConditional (在条件语句中查找按位操作的条件、虽然这些操作都很“聪明”,但太聪明的语法很难理解 like:if (a | b)
  • BrokenNilCheck (nil检查 在某些情况会返回相反的结果 like:if (!obj1))
  • BrokenNullCheck (null检查会导致程序crash like:if (a == NULL)
  • BrokenOddnessCheck (x % 2 == 1 对于负数不起作用、使用 x & 1 == 1 or x % 2 != 0 代替)
  • CollapsibleIfStatements(检查是否两个情况可以合在一个条件中
 if (x)              // these two if statements can be
    {
        if (y)          // combined to if (x && y)
        {
            foo();
        }
    }`
  • ConstantConditionalOperator(是否条件永远true或者永远false like:int a = 1== 1 ? 1:0
  • ConstantIfExpression(条件恒true like:if(true))
  • DeadCode (永远不会执行的代码 like:if(a = 1) return 1; return 2;//deadcode)
  • DoubleNegative(双重否定 like:if(!!a))
  • ForLoopShouldBeWhileLoop (在应该使用while的时候是用来for)
  • GotoStatement (使用goto 语句 like:goto a
  • JumbledIncrementer 乱七八糟的增量 like:
for (int i = 0; i < a; i++) {
        for (int j = 0; j < a; i++) { // references both 'i' and 'j'
        }
    }
  • MisplacedNilCheck (nil 检查被放错了地方、在OC中、向一个nil对象发送消息、什么也不会发生、但是代码读起来会很让人费解 like:if ([obj1 isEqualTo:obj2] && obj1))
  • MisplacedNullCheck (null check被放错了地方、在C 和C++中、想一个null 指针发送消息会导致crash like:if (a->bar(b) && a != NULL)
  • MultipleUnaryOperator (多重一元操作很难理解 like:int b = -(+(!(~1)));)
  • ReturnFromFinallyBlock(在finallyBlock 中return 是不推荐的)
@try
    {
   
        foo();
    }
    @catch(id ex)
    {
   
        bar();
    }
    @finally
    {
   
        return;         // this can discard exceptions.
    }
  • ThrowExceptionFromFinallyBlock()
@try {;}
    @catch(id ex) {;}
    @finally {
        id ex1;
        @throw ex1;                              // this throws an exception
        NSException *ex2 = [NSException new];
        [ex2 raise];                             // this throws an exception, too
    }

Cocoa(objc)

  • ObjCVerifyIsEqualHash(重写isEqual 一定要重写 hash)
  • ObjCVerifyIsEqualHash(必须call super的情况 比如 layoutSubViews
  • ObjCVerifyProtectedMethod(因为在OC中是没有protected,所以有的时候希望强制某个方法只能被它自己或者子类才能调用)
@interface A : NSObject
- (void)foo __attribute__((annotate("oclint:enforce[protected method]")));
@end

@interface B : NSObject
@property (strong, nonatomic) A* a;
@end

@implementation B
- (void)bar {
    [self.a foo]; // calling protected method foo from outside A and its subclasses
}
@end
  • ObjCVerifySubclassMustImplement (子类必须实现的方法)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值