Objective-C的方法只要是声明在@interface里,就可以认为是公有的。实际上,Objective-C没有像 Java、C++ 中的那种绝对的私有及保护成员方法,仅仅可以对调用者隐藏某些方法。
声明和实现都写在 @implementation 里的方法,类的外部是看不到的。
可以使用Category*来实现私有方法,使用这种方法时,外部就不能直接调用到 privateSayHello 方法。
// AClass.h
@interface AClass : NSObject
-(void)sayHello;
@end
// AClass.m
/*Category*/
@interface AClass (private)
-(void)privateSayHello;
@end
@implementation AClass
-(void)sayHello {
[self privateSayHello];
}
-(void)privateSayHello {
NSLog(@"Private Hello");
}
当我们想通过 Category 来进行方法隐藏的时候,我们可以把实现放在主 implementation 里。如上面所示
当我们想扩展别的不能获取到源代码的类,或者想把不同 Category 的实现分开,可以新建 <ClassName>+CategoryName.m 文件,在里面进行实现:
#import "SystemClass+CategoryName.h"
@implementation SystemClass ( CategoryName )
// method definitions
@end
- 也可以使用 Extension 来实现私有方法:
// AClass.h 与上面相同
// AClass.m
@interface AClass()
-(void)privateSayHello;
@end
@implementation AClass
-(void)sayHello {
[self privateSayHello];
}
-(void)privateSayHello {
NSLog(@"Private Hello");
}
@end