[Objective-C] 为什么Objective-C不支持类的私有方法

参考: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值