封装框架头文件中的属性和方法

时间:2012-12-19 15:58:34

标签: objective-c ios frameworks private encapsulation

我的目标是构建一个框架,但隐藏公共标题中的一些方法和属性

关键是框架内置了所有内容,但不同的版本必须隐藏一些属性和方法

我正在寻找一些方法,要么从构建的标题中删除一些标记的属性,要么避免在构建阶段添加它们。

在我看来,它应该是这样的:

@interface MyClass

@property (strong, nonatomic) SomeClass1* instance1;

#AVAILABLE FROM 1.0.2
@property (strong, nonatomic) SomeClass2* instance2;

#AVAILABLE FROM 1.0.3
@property (strong, nonatomic) SomeClass3* instance3;

- (void) method1;

#AVAILABLE FROM 1.0.3
- (void) method2;

@end

因此,如果我将一些预定义的版本值或项目版本值(并不重要)设置为1.0.2 那么instance1,instance2和method1应该在框架头文件中,但是 instance3和method2仅在1.0.3或更高版本中可用

有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用预编译步骤执行此操作:

a)在每个buildTarget的项目中,创建一个#def值,如版本(#define VERSION 1.0)。每个buildTarget应该有不同的版本,并代表您的FW的不同版本。为此,请转到项目选项,构建目标选项 - >构建设置 - > PRECOMPILER MACROS

b)创建一个预编译器函数,如GREATER THAN: #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) v>= VERSION(可以在.pch中定义)

c)在标题栏

  #if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(1.0.2))
  property (strong, nonatomic) SomeClass2* instance2;
  #endif

你认为这可以解决你的问题。

如果您这样做,预编译器将跳转其版本

下的代码