Yui 0.1.0

Yui 0.1.0

CallMeSH 维护。



Yui 0.1.0

  • 作者:
  • Charles-Henri DUMALIN

Yui:使用 Coordinator,避免引用循环。

Coordinator 模式是一种通过将导航逻辑提取到独立对象中,从而提高 View Controller 可重用性的优秀方式。要了解更多关于这个概念,你应该阅读 KHANLOU 的精彩博客上的这篇文章。

但是,如果实现不当,Coordinator 可能会导致由于僵尸 Coordinator 和 View Controller 而引起的巨大内存泄漏。

基于协议的 Coordinator

Yui 的主要协议:`Coordinator`。假设您将希望每个 Coordinator 都在一个树形结构中嵌入多个子 Coordinator。这就是为什么您需要提供一个 `Coordinator` 数组的原因。

Yui 定义了几个扩展作为其协议的默认实现,这使得操作子 Coordinator 变得很容易。如果按照预期使用,Yui 将防止 Coordinator 泄漏。

当释放 View Controller 时,其 `Coordinator` 将通过告诉其父 Coordinator(如果有)从 `Coordinator` 树中删除自身来自动销毁。

这种灵活的架构使您能够在其应用程序中实现任何类型的导航(`UINavigationController`、`UITabBarController`、嵌入的 View Controller...)。

安装

CocoaPods

要使用 CocoaPods 将 Yui 集成到 Xcode 项目中,请在您的 `Podfile` 中指定它

pod 'Yui', '~> 0.1.0'

然后,运行以下命令:

pod install

Carthage

要使用Carthage将Yui集成到Xcode项目中,请在您的Cartfile中指定它

github "CallMeSH/Yui" ~> 0.1.0

运行carthage update来构建框架,并将构建好的Yui.framework拖拽到Xcode项目中。

使用Yui实现协调器

使用Yui就像遵守Coordinator协议一样简单。

协议要求您创建此方法

start(animated:Bool)

当控制器需要显示时会被调用的方法。为了内存安全的原因,您通常会在这个方法中创建控制器,并在将其交给UIKit(例如,在一个导航控制器上push或者将作为子视图控制器添加)后仅保留一个弱引用。

以及这些属性

completionDelegate

一个弱变量,用于通知父协调器您想要它自我销毁。默认的Coordinator实现负责设置委托。

childCoordinators

一个要保留在内存中的协调器数组。

viewController

一个属性,当存在时返回协调器管理的视图控制器。

Yui 尽量减少在使用您项目时的影响,为此,它自带一个协议。如果您认为每个步骤的设置太繁琐,我们建议您创建一个根类,该类将实现分配代理和子协调器数组。

使用示例

示例项目中包含在项目demo目录下的Example。它实现了基于标签栏和导航控制器的应用程序架构。这将为您下一个项目提供灵感。

贡献

Yui的源代码相对简单,目前使用Objective-C运行时,因为Swift没有生存期概念(链接到Rust文档)。我们始终在寻找更好的做事方式。如果您认为可以带来一些改进以使库变得更好,我们将很高兴审阅您的拉取请求或变更请求!

进行中

  • 添加单元测试
  • 添加集成测试
  • 添加公共类型的自动生成文档