您的位置:首页 > 移动开发 > IOS开发

iOS依赖注入框架系列(二):设置Typhoon

2015-08-04 17:26 232 查看
在循环的最后一部分,我们遇到了依赖注入框架为iOS - 台风,并审查其项目Rambler.Pochta使用的基本示例。 这一次,我们进入它的内部结构的研究。


周期“在iOS中右依赖驱动的应用程序”

熟悉台风

该器件台风

模块化台风

台风技巧与诀窍

台风替代品

(可选)Rambler.iOS#3。 依赖注入的iOS。 幻灯片

(可选)Rambler.iOS#3。 依赖注入的iOS。 视频


介绍

要开始分析一个小字典将被广泛使用在这篇文章中的术语:

大会(读作[essembli])。 最近相当于俄罗斯
- 装配设计。 台风 - 一个对象,它包含了所有的应用程序依赖的配置,基本上是整个体系结构的骨干。 到外面的世界,当被激活时,像普通的工厂。

定义。 至于俄语翻译- 我印象最深刻的结构中,由于最接近原始版本TyphoonDefinition -是是一种依赖模型包含的信息,如被创建的类的对象,其属性,生命周期的类型的对象。 大部分从以前的文章中的例子处理一样的各种自定义选项TyphoonDefinition。

范围。 这很简单 - 这是使用台风创建的对象的生命周期的类型。

激活。 通过该过程中的所有对象继承人TyphoonAssemby
TyphoonDefinition而是开始给类的实例实。 激活的原理和精髓考虑如下。

并再次我要强调的事实,这是理解框架的基本原则很重要 - 然后我们就可以放心地继续前进,并探讨所有其他馍台风,并非住在他们实施的细节。

为了不成为一个巨大的混乱代码清单,我偶尔也会提及该框架的具体文件,并只给予最有趣的时刻。 我提醒你注意一个事实,即台风框架的当前版本为写这篇文章- 3.1.7。


初始化

使用台风的应用程序的生存周期如下:

呼叫main.m文件

创建的UIApplication - [UIApplication的初始化]

创建UIAppDelegate - [UIAppDelegate的init]

呼叫setDelegate:在实例创建的UIApplication

呼叫zasvizzlennoy 教室TyphoonStartup实施setDelegate:

调用-applicationDidFinishLaunching:withOptions:在实例UIAppDelegate

这是zasvizzlennom setDelegate:是创建和激活开始装配。

自动装料设备可能有两种方式:要么我们已经指出在他们班下的Info.plist键TyphoonInitialAssemblies:

+(ID)factoryFromPlistInBundle:(*一个NSBundle)软件包

或实现在我们-initialFactory AppDelegate中的方法:

+(TyphoonComponentFactory
*)factoryFromAppDelegate:(ID)的appDelegate

如果不这样做,无论是1还是其他 - 组件将不得不在其他地方创造他的臂膀是不推荐的代码。

有关台风的初始化更多细节可以在下面的源文件中找到:

TyphoonStartup.m

TyphoonComponentFactory.m


激活

这个过程是在框架的关键。 通过激活是指创建类TyphoonBlockComponentFactory,实例是所有活化组件的“发动机罩下”的目的。 因此,任何组件充当与该工厂的通信的接口。

让我们看看会发生什么,是不是特别进入细节:

在TyphoonBlockComponentFactory称为初始化-initWithAssemblies :,而被传递给输入阵列组件,其必须被激活。

每个生成的活化的组件definition'ov的,指定一个唯一的密钥(该方法的+ Randomnaya字符串名称)。

所有TyphoonDefinition加入到新创建的注册表TyphoonBlockComponentFactory阵列。

当然,这三个点不限于:为每个注册TyphoonDefinition加入 方面 ,所有依赖svizzlyatsya吸气剂,从而创造一个链初始化TyphoonBlockComponentFactory池中的对象图是实例 -在一般情况下,以确保该框架的操作产生了大量不同的动作。 在这篇文章中,我们将不会进入我们每个程序的细节,因为这会使人忽视的台风一般原理的理解。

我们已经看到了如何激活TyphoonAssembly -有明白为什么这一切的事。 每当我们根据TyphoonDefinition手动拉组件的任何方法轮番出现以下情况:

- (无效)forwardInvocation:(NSInvocation的*)anInvocation

所得_factory NSInvocation的处理并转换成一个呼叫到以下方法:

- (ID)componentForKey:(*的NSString)键的args:(TyphoonRuntimeArguments
*)的args

据来自selector'a关键方法生成得到一名注册TyphoonBlockComponentFactory definition'ov,然后在此基础上,或者创建一个新的实例或重复使用的缓存。

更多关于激活过程可以在下列的源文件中找到:

TyphoonAssembly.m

TyphoonBlockComponentFactory.m

TyphoonTypeDescriptor.m

TyphoonAssemblyDefinitionBuilder.m

TyphoonStackElement.m


用故事板的工作

引擎盖下台风使用一个子类UIStoryboard - TyphoonStoryboard。 以抓人眼球的第一个特征
- 是一个工厂方法是从其父的额外的参数不同 - 工厂:

[code]+ (TyphoonStoryboard *)storyboardWithName:(NSString *)name factory:(id<TyphoonComponentFactory>)factory bundle:(NSBundle *)bundleOrNil;


[/code]

正是在这家工厂实现协议TyphoonComponentFactory,将搜索屏幕definition'ov当前故事板。 看看依赖注入ViewController'y的各个阶段:

首先,我们发现自己在-instantiateViewControllerWithIdentifier :,则重新定义TyphoonStoryboard的方法。

它通过调用super'a创建所需的控制器的一个实例。

发起的注入电流控制器的所有相关性及其子公司控制器:

- (无效)injectPropertiesForViewController:(*的UIViewController)的viewController

在TyphoonBlockComponentFactory来熟悉的过程 - 检查当前类TyphoonDefinition和启动注射的工序在她的依赖关系图。

现在,我不会与TyphoonStoryboard附件中的特定实现居住 -的话题将受到下列文章之一。

与故事板的工作实现的更多细节,可以在以下源文件中找到:

TyphoonStoryboard.m

TyphoonBlockComponentFactory.m


TyphoonDefinition

几乎每一个片断由我以某种形式或给予其他类满足TyphoonDefinition。 正如我所提到何时上市的条件,TyphoonDefinition -一种配置类的创建依赖-在利益放在首位所以对我们来说是它的界面:

类_type -根据类创建

* NSString的_key -这是激活台风时产生的唯一密钥,

TyphoonMethod * _initializer -在创建的对象初始化注射 ,包含其参数所需的初始化和收集签名,

TyphoonMethod * _beforeInjections -一个方法,将依赖注入之前被调用,

TyphoonMethod * _afterInjections -一个将注入依赖后调用的方法,

*的NSMutableSet _injectedProperties -通过建立相关的集合注射物业

NSMutableOrderedSet * _injectedMethods -收集方法,其中传输依赖于某些( 注射法

要创建类型的生命周期的对象, - TyphoonScope范围

TyphoonDefinition * _parent - 基本TyphoonDefinition,所有将被当前被继承的属性,

BOOL抽象 -一个标志,指示只能用于继承的执行现有的配置,并提出它的对象不应该直接创建。

的个体值得注意范围对象的所有上述性能。

更多有关TyphoonDefinition的原理可在下列的源文件中找到:

TyphoonDefinition.m

TyphoonAssemblyDefinitionBuilder.m

TyphoonFactoryDefinition.m

TyphoonInjectionByReference.m

TyphoonMethod.m


TyphoonScope

如果此工厂将从内存被释放,她清除所有对象图- 重要的是要清楚地认识到,在谈论不同类型的对象的生命周期,我们仍然牢牢绑在实例中使用TyphoonBlockComponentFactory的寿命是很重要的。

让我们来看看每个结果TyphoonScope值的:

TyphoonScopeObjectGraph

在同一范围内构建依赖图形对象的过程中会产生一次。 从技术上讲,它看起来是这样的:你创建一个实例(任何定义)之前,建立一个池为对象图在构建依赖图的过程范围内的对象,所有的对象 - 图范围的进入游泳池,但在创建实例后,池清除。

TyphoonScopePrototype

每次用范围的TyphoonDefinition将创建类的新实例。

TyphoonScopeSingleton

与生命周期对象将生活在整个生命TyphoonComponentFactory。

TyphoonScopeLazySingleton

顾名思义 - 是将在它的第一个电话的时间来创建一个单例。

TyphoonScopeWeakSingleton

单产生使用这样TyphoonDefinition,完全相同,只要它是由至少一个对象引用的存储在存储器中 -否则它会被释放。

创建的对象,这取决于其配置的范围的特性,被存储在池TyphoonComponentFactory之一,以一定的方式的各动作。

更多关于缓存依赖台风可在下列资料中找到的原则:

TyphoonComponentFactory.m

TyphoonWeakComponentPool.m

TyphoonCallStack.m


闭幕

我们不得不考虑台风框架只是最基本的原则 -供应,激活工厂 устройство TyphoonAssembly , TyphoonStoryboard , TyphoonDefinition иTyphoonBlockComponentFactory , 特别对象的生命周期中创建。 该库包含了很多有趣的概念,它有时干脆迷人的实施。

我强烈建议休息几天在他们的头上研究埋葬- 它比值得替代了许多经验教训“工作在Xcode鼠标斯威夫特免费的,没有短信”风格的研究,“高级动画指示下载文件。”

在接下来的文章中,您将学习如何避免巨大的工厂的组装模块的外观,合适的错层结构并覆盖了整个事情的测试。


周期“在iOS中右依赖驱动的应用程序”

熟悉台风

该器件台风

模块化台风

台风技巧与诀窍

台风替代品

(可选)Rambler.iOS#3。 依赖注入的iOS。 幻灯片

(可选)Rambler.iOS#3。 依赖注入的iOS。 视频


相关链接

官方网站台风框架

台风框架的Wiki

维基百科:各个方面,面向对象编程

一个面向方面编程方法的iOS
Analytics(分析)

DI模式。 构造器注入

DI模式。 地产注入

DI模式。 方法注入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: