objective-c - 将属性和方法封装在框架头文件中

标签 objective-c ios frameworks private encapsulation

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

重点是框架已经内置了所有内容,但不同版本必须隐藏一些属性和方法

我正在寻找某种方法来从构建 header 中删除一些标记的属性或避免在构建阶段添加它们。

在我看来应该是这样的:

@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 应该位于框架 header 中,但是
instance3 和 method2 仅在 1.0.3 或更高版本中可用

有人知道怎么做吗?

最佳答案

您可以通过预编译步骤来完成:

a) 在项目中为每个 buildTarget 创建一个 #def 值,例如 version(#define VERSION 1.0)。每个 buildTarget 应该有不同的版本,并且代表您的固件的不同版本。为此,请转到项目选项、构建目标选项->build设置->预编译器宏

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

等等

您认为这解决了您的问题吗?

如果你这样做,预编译器将跳转其版本下的代码

关于objective-c - 将属性和方法封装在框架头文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956243/

相关文章:

Objective-C:是否应该在 .h 中声明 init 方法?

ios - 特定部分的渐变颜色

ios - 导入具有一些 iOS 9+ 兼容逻辑的 iOS 8 框架

objective-c - 比较 Swift 中的 AnyObject

ios - UITableView 控件上的不同行为

objective-c - AppDelegate 的当前 View Controller ?

ios - stringByReplacingOccurrencesOfString 替换较长单词的组合

android - 带有滚动动画标题的选项卡 - React native

css - 尝试构建 css 时发生 Tailwindcss 错误

ios - 无法从我的项目中的框架加载图像