OCLint

Cocoa

CallingProhibitedMethod

Since: 0.10.1

Name: calling prohibited method

When a method is declared with __attribute__((annotate("oclint:enforce[prohibited method]"))) annotation, all of its usages will be prohibited.

This rule is defined by the following class: oclint-rules/rules/cocoa/ObjCVerifyProhibitedCallRule.cpp

Example:

@interface A : NSObject
- (void)foo __attribute__((annotate("oclint:enforce[prohibited method]")));
@end

@implementation A
- (void)foo {
}
- (void)bar {
    [self foo]; // calling method `foo` is prohibited.
}
@end

CallingProtectedMethod

Since: 0.8

Name: calling protected method

Even though there is no protected in Objective-C language level, in a design’s perspective, we sometimes hope to enforce a method only be used inside the class itself or by its subclass. This rule mimics the protected behavior, and alerts developers when a method is called outside its access scope.

This rule is defined by the following class: oclint-rules/rules/cocoa/ObjCVerifyProtectedMethodRule.cpp

Example:

@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

MissingAbstractMethodImplementation

Since: 0.8

Name: missing abstract method implementation

While Objective-C language allows abstract methods to be declared without implementations, this rule tries to verify if the subclass implements the correct abstract methods.

This rule is defined by the following class: oclint-rules/rules/cocoa/ObjCVerifySubclassMustImplementRule.cpp

Example:

@interface Parent

- (void)anAbstractMethod __attribute__((annotate("oclint:enforce[abstract method]")));

@end

@interface Child : Parent
@end

@implementation Child

/*
// Child, as a subclass of Parent, must implement anAbstractMethod
- (void)anAbstractMethod {}
*/

@end

MissingCallToBaseMethod

Since: 0.8

Name: missing call to base method

When a method is declared with __attribute__((annotate("oclint:enforce[base method]"))) annotation, all of its implementations (including its own and its subclasses) must call the method implementation in super class.

This rule is defined by the following class: oclint-rules/rules/cocoa/ObjCVerifyMustCallSuperRule.cpp

Example:

@interface UIView (OCLintStaticChecks)
- (void)layoutSubviews __attribute__((annotate("oclint:enforce[base method]")));
@end

@interface CustomView : UIView
@end

@implementation CustomView

- (void)layoutSubviews {
    // [super layoutSubviews]; is enforced here
}

@end

MissingHashMethod

Since: 0.8

Name: missing hash method

When isEqual method is overridden, hash method must be overridden, too.

This rule is defined by the following class: oclint-rules/rules/cocoa/ObjCVerifyIsEqualHashRule.cpp

Example:

@implementation BaseObject

- (BOOL)isEqual:(id)obj {
    return YES;
}

/*
- (int)hash is missing; If you override isEqual you must override hash too.
*/

@end