我正在为iOS的静态库工作,并且希望实现一些公共的供库中其他类使用的方法,但不能从外部看到。基本上,我想创建类似于Apple的“私人”API调用的东西。iOS静态库和方法隐藏
我很确定有人能够调用这些方法,因为他们发现了他们的名字,但我只是想将它们与头文件一起封装在库中,以便XCode不会给他们选项默认情况下调用这些方法,可能会引发警告。
任何想法如何实现?
我正在为iOS的静态库工作,并且希望实现一些公共的供库中其他类使用的方法,但不能从外部看到。基本上,我想创建类似于Apple的“私人”API调用的东西。iOS静态库和方法隐藏
我很确定有人能够调用这些方法,因为他们发现了他们的名字,但我只是想将它们与头文件一起封装在库中,以便XCode不会给他们选项默认情况下调用这些方法,可能会引发警告。
任何想法如何实现?
一个想法如下 - 您可以在单独的.h文件的单独类别中定义类的“私有”方法。例如,你可以有A类看起来像下面:
啊
@interface A : NSObject {
}
- (void) foo; //public method
@end
现在私人A的方法可以在不同的文件中声明:
A + Internal.h
@interface A (Internal)
- (void) bar; //private method
@end
A (A.m)
的实现文件可以具有这两组方法的实现。
在您的静态库中,您不会发布名称中包含"+Internal"
的头文件。您的库的用户只能看到A.h
中的方法,但库中的类可以同时使用这两个方法。
您可以在.m文件顶部或其专用头文件中的category@interface MyClass(PrivateMethods)
或类扩展名@interface MyClass()
中声明您的“私有”方法。
类扩展是像匿名类,除了它们声明的方法必须在对应的类主@implementation块来实现。
一个类通常具有一个公开声明的API,然后有私人声明的其他方法仅供类或该类所在的框架使用。如上所述,您可以在私有头文件或实现文件中的类别(或多于一个类别)中声明这些方法。这可以工作,但编译器无法验证所有已声明的方法是否都已实现。
类扩展允许您为位于主类@interface块之外的位置的类声明附加的必需方法。
参见: Best way to define private methods for a class in Objective-C
记住,编译器将不检查是否在类中声明的方法实际上是实现与否。如果这是一个问题,您可以改为使用类扩展。类扩展与匿名类相似,只不过它们声明的方法必须在相应类的主@implementation块中实现。 – albertamg 2011-06-03 15:35:01
这工作完美! @albertamg谢谢您的澄清。我必须先把它交给@Tejas先回答。 – brandontreb 2011-06-03 15:47:38
@brandontreb够公平:) – albertamg 2011-06-03 15:51:18