iOS之武功秘籍 文章汇总

写在前面

最近在考虑团队扩张及项目数量增加的情况下,怎样持续确保团队高效产出的问题,很天然的想到了组件化这个论题.以下是个人的拾掇和考虑.

本节或许用到的ios14桌面布局图片秘籍Demo

一、组件化

谈到组件化,首要想到的是解耦模块化.其实组件化便是将模块进行抽离、分层,并拟定模块间的通讯办法,然后结束解耦的一种办法,首要运用在团队开发.

为什么需求组件化?

首要有以下四个原因:

  • 1.模块间解耦
  • 2.模块重用
  • 3.进步团队协作开发功率
  • 4.便利进行单元测试

当项目因为各种json格局需求,越来越大时,假定此刻的各个模块之间是相互调用缓存视频兼并,即你中有我,我中app装置下载有你这种情况时,会构成高耦合的情况.一旦咱们需求对某一块代码进行修改时,就会牵一发而动全身,导致项目难以维护. 其问题首要体appreciate现在以下几个方面:

  • 1.修改某个功用时,一起需求修改其他模块的代码,因为在其他模块中有该模块的ios14.4值得晋级吗引证.能够理解为高耦合导致代码修改困难
  • 2.模块对外接口不清楚,乃至显露了本不应显露的缓存文件在哪里私有接口,修改时费时费劲.能够理解为接口不固定导致的接口紊乱
  • 3.高耦合代码发生的作用便是会影响团队其iOS他成员的开发,发生代码抵触
  • 4.当模块需求重用到其他项目时,难以单独抽jsonp
  • 5.模块间耦合的忌口导appear致接口和依托联络紊乱,无法进行单元测试

所以为了jsonp跨域原理处理以上问题,咱们需求选用更标准的APP办法下降模块间的耦合度,然后组件化就应运而生,组件化也能够理解为模块化.

组件化的适用阐明

上面说了组件化的利益,可是因为组件化也是需求必定本钱的,需求花费时刻规划接口分别代码等,所以并不是悉数的项目都需求组件化.假定你的项目有以下3个以上特征就不需求组件化

  • 1.项目较小,模块间交互简略,耦合少
  • 2.项appleid没有被多个外部模块引证,只是一个单独的小模块
  • 3.模块不需求重用ios14.4怎样样,代码也很少被修改
  • 4.团队规划很小
  • 5.不需求编写单元测试

假定你的项目有以下3个以上特征,阐明你就有必要要考虑进行组件化了:

  • 1.模块逻辑凌appearance,多个模块之间一再相互引证
  • 2.项目规划逐步变大修改代码变的越来越困难(这儿可缓存视频以理解为:修改一处代码,需求一起修改其他多个当地)
  • 3.团队人数变多,提交的代码常常和其他成员抵触
  • 4.项目编译耗时较长
  • 5ios体系.模块的单元测试常常因为其他模块的修改失利

组件化的8条政策

一个项目经过组件化后怎样来评判项目组件化是否彻底或许说是否优异,能够经过以下几个方面:

  • 1.模块JSON之间没有耦合,模块内部的修改不影响其他模块
  • 2.模块能够单独编译
  • 3.模块间数据传递清楚
  • 4.模块能够随时被另一个供给了运营形式有哪几种相同功用的模块替换
  • 5.模块对外接口清楚且易维护
  • 6.当模块接口改动缓存时,此模块的外部代码能够被高效重构
  • 7.尽量用最少的修改和代码,让现有的运营总监项目结束模块化
  • 8.支缓存视频OC和Swift,以及混编json解析

前4条首要用于衡量一个模块是否真正解耦后4条首要用于衡量运营是做什么的作业内容是什么在项目实践缓存文件在哪里中的易用程度

组件化准则

一般一个项目首要分为三层:事务层通用层根底层,详细如下图所示:iOS之武功秘籍㉑: 组件化

在进行组件化时,有以下几点需求阐明:

  • 1.只能上层对底层依托,不能底层对上层的依托json字符串,因为底层是对上层的抽象
  • 2.项目公共代码资源下沉
  • 3.横向的依托尽量稀有,最好下沉至通用模块或许根底模块

二、组件化计划

现在常用的组件化计划首要有两种:

  • 1本地组件化:首要是经过在工程中创立library,运用cocoapodsworkspec进行本地处理不需求将项目上传git,而是直接在项目中以framework的办法进行调用
  • 2.cocoapods组件化:首要是运用cocoapods来进行模块的长途处理需求将项目上传git(这儿的组件化模块分为公有库私有库,对公司而言一般是私有库

本地组件化

1.创立主工程

  • 首要创立主工程iOS之武功秘籍㉑: 组件化
  • 集成cocopods,进行本地处理,实施指令pod init
  • 修改podfile,并实施json数据pod install

2.创立组件

能够创立自己的模块:

  • 主工程:首要结束表层事务代码
  • Base:基类封装
  • Toappreciateols:东西(字符串,颜色,字体等)
  • Service:服务层,封装事务东西类,例如网络层服务、耐久化服务等
  • Pods:第三方依托

其间,各个模块间的联络如下所示iOS之武功秘籍㉑: 组件化

缓存视频兼并软件面咱们进行简略的模块创立,咱们以Service为例:

  • 1.挑选new ->json格局怎样翻开 project -> iOS -> Framework,新建一个模块iOS之武功秘籍㉑: 组件化
  • 2.挑选正确的GroupWorkSpace(这儿需求留神一点:创立的library最好放在主工程根目录下,不然后续podfile实施运营形式有哪几种pod install时会报错)iOS之武功秘籍㉑: 组件化
  • 3.将创立的libraryBuild Settings -> Mach-O Tapproachype修改为静态库Stati缓存视频变成本地视频c LibraryiOS之武功秘籍㉑: 组件化

3.主工程调用library

TCJService中新建一个文件,并增加如下代码iOS之武功秘籍㉑: 组件化

  • B缓存文件在哪里uild Phases -> He缓存视频ade缓存视频在手机哪里找rs -> Public中将新建的文件增加为public,这样主工程appearance才调拜访该文件iOS之武功秘籍㉑: 组件化

  • 在主工程中,挑选target -> Linked Binary With Librarieios是什么意思s中增加TCJService,只需求build主工程,libapplerarjson格局怎样翻开y能够主动appointment联编iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

  • 主项目调用:首要import TCJService,然后运用iOS之武功秘籍㉑: 组件化

这儿需求留神的是,子library之间的相互调用,与主工程调用library相似,需求添加依托显露header即可.

4.运用cocoapods处理三方依托

假定咱们需求在TCJService中封装网络层代appreciate码,需求用到三方库Alamofire,在podfilapp装置下载e中进行如下修改iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

到此,一个本地组件化的模块就装备结束了

cocoapods组件化运营办理

除了本地组件化,还能够运用cocoapods,其原理如下图所示iOS之武功秘籍㉑: 组件化
这儿仍是以本地组件化中的结构为例

1、创立私有库房 — 创立私有Spec Repo

私有库当然要用私有Spec R缓存视频在手机哪里找epo,当然能够运用官方的Repo,但假定只想增加自己的Pods,那仍ios14桌面布局图片是运用私有的Repo把.翻开:~/.cocoapods/repos.你会看到一个mastappointmenter文件夹,这个是 Cocoapods 官方的 Spec Repo.

  • github上创立一个TCJDemoSpecs库房来作为私有的Repo

详细步骤:登录github–>点击右上角“+”approach->挑选 new repository–>输入Repository nameTCJDemoSpecs,挑选库房类型ios14.4怎样样privappearate,点击Create repository.

  • 实施repo指令增加私有Repo,将私有库房增加至本地~/.cocoapods/reposjson
pod repo add TCJDemoSpecs https://github.com/Tcj1988/TCJDemoSpecs.git

此刻假定成功的话,到:~/.cocoios卖肉直播不收费下载apods/repos 目录能够看到TCJDemoSpecsiOS之武功秘籍㉑: 组件化

2、Using Pod Lib Cjsonreate创立pods工程,即组件化工程:组件库

  • 创立一个TCJDemoSpecs项目.cd到想要创立项意图目录然后运用终端实施 — pod lib create TCJDemoS运营总监pecs
  • 依据提示顺次挑选iOS,ios卖肉直播不收费下载Objc运营助理的作业内容,Yes,None,No,TCJ

iOS之武功秘籍㉑: 组件化

  • 进入模块目录,将需求的文件拷贝TCJDemoSpecs -> ClassesiOS之武功秘籍㉑: 组件化

  • cdExample文件夹实施pod install,会将Classes更新至pods中iOS之武功秘籍㉑: 组件化

3、装备pJSONods工程

修改模块的装备文件,即TCappleJDemoSpecs.podspec

  • 假定需求依托第三方库,需求装备s.dependency
s.dependency 'AFNetworking' # 依托AFNetworking
  • 假定模块间需求相互引证,相同需求装备s.dependency,以TCJBase为例,需求引证TCJDemoSpecs
//********1、修改 podspec 文件
s.dependency 'TCJDemoSpecs'
//**ios是什么意思******2、修改 papproachodfile 文件
pod 'TCJDemoSpecs', :path => '../../TCJServices'
  • 假定需求appstore加载资源,例如图片、json、bun缓存视频dle文件ios8备忘录
    • 创立Images.xcassets用来存放TCJServices组件的图片
    • 2.json解析specs里装备资源途径缓存视频变成本地视频(有必要装备!!不然无法读取资源)
    • 3.拜访时需求指定资源文件途径

iOS之武功秘籍㉑: 组件化

那么怎样获取appointment图片呢?
在前面appstore咱们增加的TCJUtils类里边写了一个类办法:iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

运用示例:在Example工程的ViewController中直接导入TCJUtilios14桌面布局图片siOS之武功秘籍㉑: 组件化

作业作用:iOS之武功秘籍㉑: 组件化

同理,模块中的xibjson文件APP的获取办法也是相同的

4、提交至git

这儿提交至git的模块是pods工程才干够,以TCJDemoSpecs为例, 咱们刚才在git建了一个私有库:TCJDemoSpecs.

  • 实施以下终端指令iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

5、验证podspec文件

实施终端指令 pod spec lint --allow-warnings,加上 --allow-warnings为了移除正告

pod spec相关于pod lib会更为精确
pod ljsonp跨域原理ib相当于只验证一个本地库房
pod spec一起验证本地库房和长途库房

iOS之武功秘籍㉑: 组件化

6、ios8备忘录提交到私有库房

实施以下ios14.4值得晋级吗指令:pod rep运营总监o push [本地Spec Repo称谓][podspec文件途径]
pod repo push TCJDemoSpec运营形式有哪几种s TCJDemoSpec缓存视频s.podspec --allow-warningsiOS之武功秘籍㉑: 组件化

7、运用

  • 新建一个工程PodsTest,在项意图podfile里增加iOS之武功秘籍㉑: 组件化

  • 实施pod installJSONiOS之武功秘籍㉑: 组件化

  • 实施成功后翻开项目:

iOS之武功秘籍㉑: 组件化

  • PodsTest 中的 ViewController 运用组件的东西:

iOS之武功秘籍㉑: 组件化

至此咱们对cocoapods组件化现已结束,下面咱们要介绍下组件化之间的通讯.

三、组件化通讯计划

现在干流的首要有以下三种办法缓存视频兼并软件

  • 1.URL路由
  • 2.tajson格局rget-action
  • 3.protocol匹配

协议试编程

编译层面运用协议界说标准结束在不同当地,然后抵达分布处理维护组件的意图.缓存这种办法也遵循了依托运营形式有哪几种反转准则,是一种很好的面向政策编程的实践.

可是计划也很明显:

  • 因为协议式编程短少一起调度层,导ios14.4.1更新了什么难于会集处理,特别是项目规application划变大团队人数变多的情况下,架构管控就会显得越来越重要
  • 协议式编程接口界说办法过于标准,然后使得架构的活络性不够高.当需求引进一个新的规划办法来运营助理开发时,咱们就会发现很难融入到当时架构中短少架构的一起性.

中心者

它选用中心者一起处理运营的工资一般是多少办法,来控制App的整个生命周期中组件间的调用联络.一起iOS关于组件接口的规划也需APP坚持一起性,便利中心者一起调用.

拆分的组件都会依托于中心者,可是组间appreciate之间不存在相互依托的联络了.因为其他组件都会依托于这个中心者相互间的通讯都会运营是做什么的经过中心者一起调度,所以组件间的通讯也就更简略处理了.在中心者上也能够轻松运营是做什么的增加新的规划办法,然后使得架构更简略扩展

好的架构必定是强健的、活络的.中心者架构易管控带来的架构更安靖易扩展带来的活络性.

URL路由

这也是许多iOS项目运用的通讯计划,它便是基于路由匹配,或许依据命名约好,用runtime办法进行动态调用URjson是什么意思L路由思路选用了中心者办法.

这些动态化的计划利益是结束简略缺陷是需求维护字符串jsonp,或许依托于命名约好无法在编译时显露出悉数问题,需求在作业时才调发现过失.

URL路由的优缺陷

【利益】

  • 极高的动态性,适合ios是什么意思展开运营运营助理的作业内容活动的app.例如:电商类缓存视频兼并
  • 便利一起处理多渠道的路由规则
  • 易于适配URL Scheme

【缺陷】

  • 传参办法有限并且无法运用编译期进行参数类型查看(全缓存视频在手机哪里找部的参数都是经过字符串转化而来)
  • 只适用于界面模块不适用于通用模块运营形式有哪几种
  • 参数格局不清楚,是个活络的dictionary,还需求有个当地查看参数格局
  • 不支撑storyboard
  • 依托于字符串硬编码,难appointment以处理,蘑菇街为此专门做了一个后台处理这部分
  • 无法确保悉数运用的模块必定存在
  • 解耦才干有限URL的”注册”,”结束”,”运用”有必要运用相同的字符串规则,一旦任何一方做出修改都会导致其他当地的代码失效,并且重构难度大

URL路由办法首要是以蘑菇街为代表的MGJRouter

MGJRoutios14.4值得晋级吗er

其结束思路是:

  • App启动时实例化各组件模块,然后这些组件向MGJRouter注册URL,有时分不需求实例化缓存的视频怎样保存到本地使用Class注缓存视频变成本地视频.iOS之武功秘籍㉑: 组件化
  • 组件A需求调用组件B时,向Moduleios14.4值得晋级吗Manager传递URL,参数随从URLGET办法传运营是做什么的递,相似o运营形式有哪几种pe缓存和下载的差异nURL.然后由ModuleManager担任调度组件B,毕竟结束任运营是做什么的作业内容是什么务.iOS之武功秘籍㉑: 组件化

除了上面的MGJRouter,还有以下三方结构

  • routable-ios
  • JLRoutes
  • HHRouter

target-action

这个计划是基于OCruntimecategory特性动态获取模块,例如经过NSClassFromString获取类并创立实例,经过performSel缓存视频ector+NSInvocation动态调用方ios8备忘录

这种办法首要是以casatwy的CTMediator为代表,其结束思路缓存视频怎样转入相册是:

  • 1json解析.运用分类路由增加新的接口,在接口经过字符串获取对应的类
  • 2.经过runtime创立实例,动态调用实例的办法
//******* 1、分类界说新接口
public extension CTMediator{
@objc func A_showHome()->UIViewController?{
let params = [
kCTMediatorParamsKeySwiftTargetModuleName: "TCJLH缓存视频变成本地视频ome"
]
if let vc = self.perfor运营助理的作业内容mTarget(appearance"A", action: "Extensionios是什么意思_HomeViewController", params: params, shouldCacheTarget: false) as? UIViewController{
return v缓存视频怎样转入本地视频c
}
return nil
}
}
//****approach*** 2、模块供给者供给target-action的调用办法(对外需求加上public关键字)
class Target_A: NSObject {
@ojsonbjc public func Action_Extension_Hios14.4值得晋级吗omeViewController(_ pajson文件是干什么的rams: [String: Any])->UIViewContrios下载oller{
let home = HomeViewController()
return home
}
}
//******* 3、运用
if let vc =运营的工资一般是多少 CTMediator.share缓存视频兼并软件dInstance().A_showHome() {
self.navigationController?.pushViewController(vc, animated: true)
}

模块间的json引证联络如appointment下:iOS之武功秘籍㉑: 组件化

【利益】:

  • 运用分类能够声明接口,进行编译查看
  • 结束办法轻量级

【缺陷】:

  • 需求在mediatortarget从头增加每一个接口app装置下载模块化时代码较为繁琐app装置下载
  • cateAPPgory中仍然要引进字符串硬编码,内部运用字典传参,必定程度上也存在和URL路由相同的问题
  • 无法application确保运用的模块必定存在target在修改apple,运用者只能在作业时才调发现过失
  • 创立过多的target类,导致tajson格局怎样翻开rgeAPPt类许多

CTMediator源码剖析

  • CTMediator运用URL路由处理:这ios14.4怎样样个办法首要是针对长途APP的相互调起,经过openURL结束APP之间的跳转,经过URL进行数据传递iOS之武功秘籍㉑: 组件化

  • CTMediator运用的是作业时解耦,解耦中心办法如下所示:iOS之武功秘籍㉑: 组件化

    • performTarget:action:params:shouldCacheTaios体系rget:办法首要是对 targetNameactiojsonp跨域原理nName进行容错处理,也便是对调用办法无ios8备忘录照应的处理.
    • 这个办法封装了safePe运营助理rformAcapproachtion:target:params 办法,入参targetName便是调用接口的政策,actionName是调用的办法名,params是参数.
    • 并且代码中一起还能看出只需满意jsonpTarget_ 前缀的类的政策Action_的办法才调被CTMediator运用.这时,咱们能够看出中心者架构的优势,也便是利于一起处理,能够轻松管控拟定的规则.
  • 进入sapproachafePejsonprformAction:target:params:结束,首要是缓存视频兼并经过invocatappstoreion进行参数传递+音讯转发iOS之武功秘籍㉑: 组件化

pr运营办理otocol class

protocol匹配的运营结思路是:

  • 1.将protocol和对应的进行字典匹配
  • 2.经过用protocol获取class,再动态创立实例

protocol比较典型的三方结构便是阿里的BeeH缓存视频怎样转入本地视频ive.BeeHive借鉴了Spring Service、Apache DSO的架构理念,选用AOP+扩展App生命周期API办法,将事务功用根底功用模块以模ios是什么意思块办法处理大型运缓存视频怎样转入本地视频用中的凌乱问题,并让模块之间以Service办法json解析调用,将凌乱问题切分,以AOP办法模块化服务.

BeeHi运营是什么意思ve 中心思想

  • 1.各个模块间调用直接调用对应模块,变ios卖肉直播不收费下载调用Service的办法防止直接依托
  • 2ios14桌面布局图片.App生命周期的分发,将耦合在AppDelegate中逻辑拆分,每个模块以微运用的办法独立存在

【利益】

  • 1.运用接口调用,结束参缓存数传递时的类型安全
  • 2.直接运用模块的protocol接口,无需再重复封装

【缺陷】

  • 1.用appstore结构来创立悉数政策,创立办法不同,即不支撑外部传参
  • 2.用OCruntime创立政策,不支撑Swift
  • 3.只做了protocolclass的匹配,不支撑更凌appstore乱的创立办法和依托注入
  • 4.无法确保所以运用的protocol必定存在对应的模块json文件是干什么的,也无法直接判断某个protocol是否app装置下载能用于获取模块.

除了BeeHive还有Swinject

BeeHive 模块注册

BeeHive中首要是经过BHModuleManagerappreciate来处理各个模块的.BHMo运营总监duleManager中只会处理现已被注册过的模块

BeeHive供给了三种不同的调用办法,静态plist动态appreciate注册annotation.ModuleService之间没有相关每个事务模块能够单独结束Module或许Service的功用.

Anappleidnotation办法注册

这种办法首要是经过BeeHiveMod宏进行AnnotationjsonpiOS之武功秘籍㉑: 组件化
这儿针对__attribute需求阐明以下几点

  • 第一个参数used:用来润饰函数,被used润饰以后,即使函数没有被引证,在Release下也不会被优化.假定不加这个润饰,那么Release环境链接器下会去掉没有被引证的段.
  • 经过运用__attribute__((section("name"))缓存和下载的差异)指明哪个段.数据则用__attribute__((used))来符号,防止链接器会优化删去未被运用的段,然后将模缓存视频怎样转入本地视频块注入到__DATA中.

此刻Module现已被存储到Mach-O文件的特别段中,那么怎样取呢?

  • 进入BHReadConfiguration办法,首要是经过Mach-O找到存储的数据段,取出放入数组中iOS之武功秘籍㉑: 组件化
读取本地Pilst文件
  • 首要,需appleid求设置好途径iOS之武功秘籍㉑: 组件化

  • 创立json格局怎样翻开plist文件,ios14.4怎样样plist文件的格局也是数组app装置下载中包含多个字典.字典里边有两个key,一个是"moduleLevel",另一个是ios模拟器"moduleCla缓存ss".留神根的数组的缓存视频姓名"moduleClasses".iOS之武功秘籍㉑: 组件化

  • 进入loadLocalModules办法,首要是从plist里边取出数组,然后把数组加入到BHModuleInfos数组里iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

动态注册 — loa缓存视频兼并软件d办法注册
  • 该办法注册Module便是在load办法里边注册Module的类iOS之武功秘籍㉑: 组件化

  • 进入registerDynamicModule结束iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

其底层仍是同第一种办法相同,终json格局究会走到addM运营是什么意思oduleFromObject:shouldTrjson是什么意思iggerInios14.4.1更新了什么itEvent:办法中

  • loadapplication办法,还能够运用BH_EXPORT_MODULE宏代替iOS之武功秘籍㉑: 组件化

BH_ios体系EXPORT_MODULE宏里边能够传入一个参数,代表是否异步加载Module模块,假定是YES便是异步加载,假定是NO便是同步加载.

BeeHive模块作业

BeeHive会给每个模块供给生命周期作业,用于与BeeHive宿主环境进行必要信息交互appstore知模ios体系块生命周期的改变`.

BeeHive各个模块会收到一些作业JSON.在BHModuleManager中,悉数的缓存的视频怎样保存到本地作业被界说成了BHModuleEventTyjson字符串pe枚举.如下所示,其间有2个作业很特别,一个是BHMIniappearancetEvent,一个是BHMTe运营ar运营是什么意思DownEvent. iOS之武功秘籍㉑: 组件化

首要分三种作业:ios卖肉直播不收费下载

  • 1.体系作业:首要是指Applicios14.4值得晋级吗ation生命周期作业iOS之武功秘籍㉑: 组件化

一般的做法是AppDelegate改为继承自BHAppDelegateiOS之武功秘籍㉑: 组件化

  • 2.运用作业:官方给出的流程图,其间modSetujson是什么意思pmodInit等,能够用application编码结束各插件模块的设置与ios14桌面布局图片初始化.iOS之武功秘籍㉑: 组件化

  • 3.自界说作业

以上悉数的json数据作业都能够经过调用BHModuleManagertriggerEvent:来处理.iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

从上面的代码中能够发现,除掉BHMInitEvent初始化作业和BH缓存视频怎样转入相册MTearDownEios模拟器vent吊销Module作业这两个特别作业以外,悉数的作业都是调用的handleModuleEvent:forTarget:withSeletorStr:andCustomParam:办法,其内部结束首运营是做什么的要是遍历 moduleInstances 实例数组,调用performSelector:withObject:办法结束对应办法调用iOS之武功秘籍㉑: 组件化
留神:这儿悉数的Module运营是做什么的作业内容是什么有必要是遵循Bjson格局怎样翻开HModuleProtocol的,不然无法接收到这些作业的音讯

BeeHive模块调用

BeeHi缓存的视频怎样保存到本地ve中是经过BHServiceManager来处理各个Proappstoretocol的.BHServiceManager中只会处理缓存的视频怎样保存到本地现已被注册过的Protocol.

注册Protios14.4.1更新了什么ocol的办法总共有三种,和注册Module是相同一一对应的.

Annotation办法注册
//****** 1、经过BeeHiveService宏进行Annotation符号
BeeHiveService(HomeServiceProtocol,BHViewController)
//****** 2、宏界说
#define BeeHiveService(servicename,impl) 
class BeeHjson是什么意思ive; char * k##servicename##_service BeeHiveDATA缓存视频兼并(BeehiveServices) = "{ ""#servicename"" : ""#impl""}";
//****** 3、转化APP后的格局,也是将其存储到特别的段
char * kHomeServiceProtocol_service __attrjson解析ibute((used, sectionapple("__DATA,""BeehiveServices"" "))) = "{ """HomeServicejson是什么意思Protocol""" : """BHViewController"""}";
读取本地plist文件
  • 首要appreciateModule相同,需求先设置运营是做什么的作业内容是什么好途径iOS之武功秘籍㉑: 组件化

  • 设置plist文件iOS之武功秘籍㉑: 组件化

  • 相同也是在setContext时注册servicesiOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

prot运营助理的作业内容ocol注册

首要是调用BeeHive里边的createService:结束protocol的注册iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化iOS之武功秘籍㉑: 组件化

cr运营办理eateappointmentService会先查看Protocol协议是否是注apple册过的.然后接着取出字典里边对应的jsonp跨域原理Class,假定结束了shareInstance办法,那么就创立一个单例政策,假定没有,那么就创立一json数据个实例政策.假定还结束了sjson解析ingleton,就能进一步的把implInstanceserviceStrapplication对应的加到BHContextser缓存视频在手机哪里找vicesByName字典里边缓存起来.这样就能够跟着上下文传递了

进入serviceImplClass结束,从这儿能够看出protocol是经过字典绑定的,protocol作为keyserviceImp(类的姓名)作为value.iOS之武功秘籍㉑: 组件化

Module & Protocol

简略的总结一下:

  • 关于Module:数组存储
  • 关于Protocol运营是做什么的作业内容是什么:经过字典protocol与类进行绑定key运营办理为protocolvalue为 serviceImp即类名.

辅佐类阐明JSON

  • BHConfig类:是一个单例,其内部有一个NSMutableDicios体系tionary类型的config特色,该特色维护了一些动态的环境变量,作ios体系JSONBHContext运营是做什么的补偿存在

  • BHContext类:是一个单例,其内部有两个NSMutableDictionary的特色,分别是modulesAPPByNameservicesByName.这个类首要用来保存上下文信息的.例如在application:didFinishLaunchingWithO运营商ptions:的时分,就能够初始化许多的上下文信息iOS之武功秘籍㉑: 组件化

  • BHTimeProfiler类:用来进行计算时刻功能方面ios模拟器Profiler

  • BHWatchDog类:用来开一个线程监听主线程是否阻塞.

写在后面

和谐学习,不急不躁.我仍是我,颜色不相同的烟火.

参看链接

BeeHive —— 一个高雅但还在完善中的解耦结构运营是做什么的作业内容是什么

BeeHive,一次iOS模块化解耦实践