我正在尝试使用私有方法改进我的应用程序的设计。来自.NET我有点困惑,因为我在.m文件中声明这些方法,但是从其他文件中它们仍然出现,即它们仍然可以访问。
.m文件:
@interface NSContentWebServiceController (private)
- (NSString *)flattenHTML:(NSString *)html;
- (NSString *)cleanseStringOfJsonP:(NSString *)jsonP;
- (void)retrieve:(NSasdf *)hasdel :(NSDictionary *)rootList;
- (NSString *)removeHTMLTagsFromString:(NSString *)aString;
@end
答案 0 :(得分:5)
正如JoostK所说,Objective-C中没有私有方法,就像你在C ++,Java或C#中使用它们一样。
最重要的是,表达式@interface NSContentWebServiceController (private)
在Objective-C中定义了一个所谓的类别。这里的术语private
仅仅是该类别的名称,没有任何意义。在这里使用类似yellowBunny
的内容会产生相同的效果。类别只是将类分解为几个部分的一种方法,但在运行时所有类别都有效。请注意,类别只能向对象类添加新方法,而不能添加新变量。
对于私有类别,现在首选使用匿名类别,如@interface MyClass()
中所示,因为您不需要单独的@implementation MyClass(yellowBunny)
块,但只需将方法添加到主@implementation
阻止。
有关详细信息,请参阅"Categories" section in the Wikipedia entry on Objective-C。
答案 1 :(得分:3)
私有方法只是以未在头文件中记录的方式私有。因此,你不能#import
他们进入你的项目,因此编译器会警告你'未被识别的选择器'或类似的东西。
你将能够像公共方法一样调用这些方法,因为它只是 where 你声明了一个使方法变为私有的原型,Objective-C没有隐藏这样的东西,非常私人的方法。
在运行时,您将始终能够使用内省找到所有方法,因此实际上无法完全隐藏您的方法/属性。
你可以添加一个id _internal
实例变量,该变量指向一个完成所有工作的对象,这样调用私有方法就更难了,尽管并非不可能。