iOS静态库和方法隐藏

bra*_*reb 0 iphone objective-c

我正在为iOS的静态库工作,并希望实现一些公共的方法,供库中的其他类使用,但不能向外看.基本上,我想创建类似于Apple的"私有"API调用.

我很好,有人能够调用这些方法,因为他们发现了他们的名字,但我只想掩盖他们从库中打包的头文件,以便XCode不给他们选择通过调用这些方法默认情况下,可能会发出警告.

知道如何实现这一目标吗?

Tej*_*jas 6

一个想法如下 - 您可以在单独的.h文件中的单独类别中定义类的"私有"方法.例如,您可以将A类看起来如下所示:

啊

@interface A : NSObject {
}
- (void) foo; //public method
@end
Run Code Online (Sandbox Code Playgroud)

现在可以在不同的文件中声明A的私有方法:

A + Internal.h

@interface A (Internal) 

- (void) bar; //private method

@end
Run Code Online (Sandbox Code Playgroud)

A的实现文件(A.m)可以具有两组方法的实现.

在静态库中,不要"+Internal"在名称中发布头文件.您的库的用户只能看到方法A.h,但库中的类可以同时使用这两种方法.

  • 请记住,编译器不会检查类别中声明的方法是否实际实现.如果这是一个问题,您可以使用类扩展.类扩展类似于匿名类,除了它们声明的方法必须在相应类的主@implementation块中实现. (3认同)

alb*_*amg 5

您可以在.m文件顶部或其自己的专用头文件中的类别 @interface MyClass(PrivateMethods)或类扩展@interface MyClass()中声明"私有"方法.

来自扩展程序:

类扩展类似于匿名类,除了它们声明的方法必须在相应类的主@implementation块中实现.

类通常具有公开声明的API,然后私有地声明其他方法,仅供类所在的类或框架使用.您可以在上面提到的私有头文件或实现文件中的类别(或多个类别)中声明此类方法.这可行,但编译器无法验证是否已实现所有声明的方法.

类扩展允许您在主类@interface块之外的位置为类声明其他必需的方法.

另请参见: 在Objective-C中为类定义私有方法的最佳方法