Extended Objective-C 库扩展了 Objective-C 编程语言的动力,以支持其他编程语言中存在的某些模式(包括那些不是必要面向对象的模式)。
libextobjc 意在非常模块化 - 其中的大多数类和模块都可以无需更多的依赖项即可使用。
功能
libextobjc 目前包含以下功能
- 安全的分类,使用 EXTSafeCategory,在不覆盖任何已有内容的情况下向类中添加方法(为您识别冲突)。
- 具体协议,使用 EXTConcreteProtocol,为协议中的方法提供默认实现。
- 更简单、更安全的键路径,使用 EXTKeyPathCoding,它在编译时自动检查键路径。
- 使用 EXTSelectorChecking 验证选择器,以确保对象声明了一个给定的选择器。
- 在块中使用弱变量的便利性,使用来自 EXTScope 模块的
@weakify
、@unsafeify
和@strongify
。 - 基于作用域的资源清理,使用 EXTScope 模块中的
@onExit
,在作用域结束时自动清理手动分配的内存、文件句柄、锁等。 - 使用 EXTADT 完全在编译时生成的代数数据类型。
- 为分类生成合成属性,使用 EXTSynthesize。
- 基于块的协程,使用 EXTCoroutine。
- EXTNil,类似于
NSNull
,但其行为与实际的nil
更加紧密(即,发送未识别的消息时不会崩溃)。 - 许多扩展和额外的功能,构建在
<objc/runtime.h>
之上,包括极其可定制的查找方法和反射对象属性,以及各种扩展类层次结构检查和查找的方法。
实验 分支包含了一些可能很有趣但不是用于生产环境的附加功能。检查头文件以获取更多信息。
运行测试
要执行 libextobjc 的测试,首先运行 git submodule update --init --recursive
以拉取 xcconfigs 子模块,然后打开项目文件并选择所需的测试目标。
添加到项目中
如果您想将 libextobjc 作为依赖添加到 应用程序 中,请将其作为 子模块 添加,然后在您的 Xcode 项目中包含您关心的源文件。
如果您想将 libextobjc 作为依赖添加到 框架或库 中,建议使用 子树合并,这允许您重命名符号以避免冲突,并对您的库进行任何必要的调整。
要创建 libextobjc 子树
$ git remote add libextobjc https://github.com/jspahrsummers/libextobjc.git
$ git fetch libextobjc
$ git read-tree --prefix=External/ -u libextobjc/master
$ git reset
重命名任何符号或更改您想要的任何内容,使用 git add
添加您库中希望包含的特定文件,然后将它们添加到您的 Xcode 项目中。
要后续引入上游变更
$ git fetch -p libextobjc
$ git merge -Xsubtree=External/ libextobjc/master
$ git reset
然后,再次只添加您想要的变更。
许可
在 MIT 许可下发布。有关更多信息,请参阅 LICENSE 文件。
要求
libextobjc 必须启用 ARC 来构建,并且很多宏也需要在调用文件中开启 ARC。不支持 MRR 使用。