参考:http://stackoverflow.com/questions/2158660/why-doesnt-objective-c-support-private-methods
Objective-C可以通过 @private, @public and @protected 定义类的成员变量的访问权限,但不能限定类的成员函数的访问权限。换言之,Objective-C的类只有public 方法,而没有private 或protected 方法。
其原因,简言之就是,简单 和 一致性:
1)如果支持priviate method,会带来巨大的复杂性和额外开销
- 在一个的所有方法都是private的情况下,在运行时,程序不需要在每调一个方法时,都去判断这个方法是否时private的
2)不支持private method,可以保持“一致性”
- 在C++中,一个类的任何方法,无论是public的,还是private的,都要在类的申明处出现,只不过,会用不同的关键字(public: private: protected:)区分
- Objective-C中,一个类的申明中只给出public方法,所有的private方法,都通过其他方式隐藏于implementation中,类的使用者看不到也不用关心这些private方法
- Objective-C中,一个类在申明中没有出现的方法,在类的实现中也不要出现。基于这样的设计理念,类不支持private方法
- Objective-C中,可以通过在.m文件中定义类的category,在category中增加method,以达到给.h中申明的类添加private方法的目的
【给Objective-C的类添加private方法的例子】
MyObject.h
@interface MyObject : NSObject {}
- (void) doSomething;
@end
MyObject.m
@interface MyObject (Private)
- (void) doSomeHelperThing;
@end
@implementation MyObject
- (void) doSomething
{
// Do some stuff
[self doSomeHelperThing];
// Do some other stuff;
}
- (void) doSomeHelperThing
{
// Do some helper stuff
}
@end