我正在为方法寻找类似于@protected
的东西。 @protected
似乎仅适用于@properties
(设置者和获取者)。是否有办法为常规方法获得类似的行为?
答案 0 :(得分:4)
根据您的评论,我假设您正在谈论隐藏编译器。这确实是可能的,但可能有点麻烦。另一方面,如果有人真的希望访问您的方法,那么隐藏在运行时是不可能的。他们会。
要隐藏编译器,您应该在单独的头文件中定义类扩展名,如下所示:
#import "MyClass.h"
@interface MyClass ()
@property (nonatomic, strong) NSObject* protectedObject;
-(void) protectedMethod;
@end
您可以调用标题MyClass + Internal.h,如果您正在构建库,set the header visibility to private
现在您要做的就是在子类实现文件中导入您的私有标头(或者您可能希望在内部使用这些方法的地方)
答案 1 :(得分:0)
Objective-C中没有按方法访问控制。
您可以将API拆分为多个类别,并将它们放入不同的头文件中,以实现某种咨询访问控制。
答案 2 :(得分:0)
我已经看到这是通过.h文件中的命名(而不是匿名)类别在野外实现的:
//MyClass.h:
@interface MyClass : NSObject
/*Public stuff...*/
@end
@interface MyClass (protected)
/*Protected stuff...*/
@end
但正如其他人所提到的,这个命名类别实际上只是提供一些提示的一种方式 - 而且依赖开发人员查看.h文件而不是文档。它没有做任何神奇的事情,也没有实现任何真正的访问控制。
同样关于ObjC中受保护方法的主题,请记住,Cocoa设置为支持组合和委托而不是继承。如果你发现自己工作太辛苦,你可能正在游泳。
答案 3 :(得分:-1)
来源:您既不能声明受保护的或私有方法。宣布一个 如上所述,“私人”方法只是伪造,而不是 真的停止了什么。 Objective-C的动态性使其无法实现 实现方法的访问控制。 (你可以大量地做到这一点 以严重的速度惩罚修改编译器或运行时,但是 明显的原因没有这样做。)
Protected methods in Objective-C
http://objectmix.com/c/177901-methods-access-modifiers-objective-c.html
你可以通过一些解决方法显然模拟这个功能,但我怀疑这是好的风格。