HNBKit 0.0.9

HNBKit 0.0.9

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2017年8月

chengkang 维护。



 
依赖项
Masonry= 1.0.2
MJRefresh= 3.1.12
MJExtension= 3.0.13
 

HNBKit 0.0.9

  • 出自
  • chengkang

常用的 Obj-C 代码

#示例项目

查看 HNBKitDemo.xcworkspace


HNBURLRouter

  • URLRouter 解决项目中各 VC 之间相互引用的繁琐问题。
  • jspatch 的替代方案,使用 h5 页面代替有问题的 native 页面。

解决问题

  • 1 项目中控制器 (VC) 过多时,VC 之间跳转需要 import 许多其他 VC 的头文件,代码耦合且繁琐。
	import "WeatherViewController.h"
	WeatherViewController *vc = [WeatherViewController new];
	[self.navigationController pushViewController:vc animated:YES];
  • 2 在快速迭代过程中,即使测试再仔细,也无法保证线上产品没有 bug。之前可以使用 jspatch 方式进行热修复,但自 2017 年 3 月起,苹果不再允许使用 JSPatch 的应用上线 App Store。除了使用类似于 FaceBook 的 RN 这样的 JS 方案外,原生应用无法实现热修复。

原理

  • 1 app 所有的页面都包括导航控制器,直接通过 HNBURLRouter 提供的 push 方法或 model 方法打开目的 VC,目的 VC 通过注册的字符串绑定、runTime 获取,这样解除了 import 头文件的依赖,但存在问题,如果 VC 需要指定参数,那么使用 Router 打开 VC 时, [Router openUrl:@"*****" withParams:dict] 参数的格式不明确,字典应该是什么样子?需要查阅相关的 VC。为解决这个问题,便有了第二点。

  • 2 基于 Router 提供一个中介者,为每个 VC 提供打开方式。例如:[Mediator orderDeatilViewControllerWithId:orderID] 方法内部使用 URLRouter 获取具体的 VC 并赋参,参数可以是普通类型,也可以是复杂数据类型,甚至是非常规类型,这样就解决了 casatwy 提出的 传 params 容易懵逼的问题iOS 应用架构谈 组件化方案)。

  • 3 为了解决线上 bug 问题,可以使用 webView 替换 native VC 的方法修改线上 bug。具体做法是在 Mediator 打开一个具体的控制器时,可以在检查本地字典需要打开的控制器是否需要被替换,本地字典可以在 app 启动时就获取。