4

我想为objective-c中的以下类准备小型静态库:A类,B类,C类。我想将这些类包含在静态库中。现在 A 类可以访问 B 类或 C 类方法的公共成员。

现在,当我将上述库集成到其他项目中时,我准备了只能访问 A 类和 B 类而不是 C 类的 D 类。我该怎么做?

我的另一个疑问是假设 NSString *isValid 在 B 类中声明。

我希望可以从 A 类和 C 类访问上面的变量我的意思是库的包含文件可以访问上面的变量。

但是无法从外部库访问上面的变量。如何将其设为私有,以便可以在图书馆本身内部而不是在图书馆外部访问它?

感谢帮助 !

4

2 回答 2

4

您可以使公共方法仅对您的静态库可见,但在其外部不可见。

这是如何做到的。

1) 创建一个在你的库之外使用的头文件

#import <Foundation/Foundation.h>

@interface ClassA : NSObject 

@property(nonatomic,readwrite)BOOL publicProperty;

-(void)publicMethod;

@end

2)创建一个仅由静态库内部使用的类别

#import "ClassA.h"

@interface ClassA (Internal)

@property(nonatomic,readwrite)BOOL privateProperty;

-(void)privateMethod;

@end

注意将此文件命名为:“ClassA+Internal.h”

3) 在 .m 文件中再次声明你的私有属性和方法

#import "ClassA.h"

@interface ClassA ()

@property(nonatomic,readwrite)BOOL privateProperty;

-(void)privateMethod;

@end

@implementation ClassA

@synthesize publicProperty;
@synthesize privateProperty;

//...

@end

在静态库中使用私有属性和方法

在您的 ClassB.m 文件中导入 ClassA 类别的头文件

#import "ClassB.h"
#import "ClassA.h"
#import "ClassA+Internal.h"

现在您可以访问 ClassA 的私有属性和方法

创建没有私有属性和方法的静态库

创建静态库时,将“ClassA+Internal.h”类别头文件保留在“Build Phases”、“Copy Headers”的“private”或“project”头文件部分

这样,当您构建静态库时,外部将无法访问 ClassA+Internal.h 类别。

于 2012-08-17T08:47:12.827 回答
-1

据我所知,在 Obj-C 中没有办法像您需要的那样保护对公共成员的访问。一种常见的方法是不将方法和 ivars 包含在随静态库一起提供的头文件中。要自己编译库,您当然必须使用完整的私有标头。

请注意,这不适用于 Objective-C++,其中类结构必须在编译时为库的客户端所知。

于 2012-08-17T07:10:48.033 回答