适用于iOS的推荐IoC框架?

Cla*_*fou 24 dependency-injection inversion-of-control ios

任何人都可以为iOS推荐一个好的IoC框架来促进依赖注入吗?

到目前为止,我发现的唯一一个是Objection Framework,它显然与Guice相似(遗憾的是我不熟悉).这是iOS的常见选择吗?是否有值得检查的竞争框架?

Jas*_*ues 21

台风

台风网站列出的主要特点.快速摘要:

  • 非侵入性.不需要宏或XML.使用Objective-C或Swift API完成配置,该API利用Objective-C运行时.

  • 轻量级.只需2500行代码.它占用空间非常小,因此适用于CPU和内存受限的设备.调整性能.

  • 使相同基类或协议的多个配置变得容易.

  • 没有神奇的字符串 - 支持IDE重构,代码完成和编译时检查.

  • 支持注入视图控制器和故事板集成.

  • 支持初始化和属性注入,以及生命周期管理.

  • 强大的内存管理功能.提供预配置的对象,没有单例的内存开销.

  • 对循环依赖性的出色支持.

  • 经过实战测试 - 用于各种Appstore特色应用.

  • 一个国际分布的核心团队(我们甚至监控StackOverflow),因此对您的任何问题的支持都是不可避免的:)

API文档和示例应用

  • 真正了解DI的唯一选择.谢谢碧玉! (3认同)
  • @aryaxt还要注意,当从一个对象图进行到另一个对象图时,提供该实例的工厂本身会被注入,并且可以由协议支持.所以根本没有与框架耦合.台风的目标是非侵入性的..(几年前就开始使用Spring Framework,并且曾经在SpringSource上教它,所以我对这个主题非常熟悉). (2认同)

Mer*_*ham 15

......是否存在值得检查的竞争框架?

反对意见是我在谷歌iOS上可以找到的DI库,所以如果你想要一个预建的库,你可能会被它困住.

DI并不特别要求使用框架.如果您的应用程序很小,您只需在应用程序根目录下创建所有实例并手动注入.

如果你需要更多,并且现有的框架没有为你削减它,你可以推出自己的服务定位器,然后在它上面构建一个DI容器.

您还可以从另一个平台移植现有的较小框架.有.Net的几个"小"的,例如- NinjectSimpleInjector.

这是iOS的常见选择吗?

它似乎是一个相当小的项目,因为只列出了一个作者/贡献者.提交的问题不多.iOS市场相当大.所以我认为只有极少数的iOS开发人员使用这个库.

但这不一定是坏事.它似乎是由一家小公司创建,使用和支持的.它在过去一年中相当稳定的更新.

我对类似范围的开源项目的轶事经验:我并不总是经常获得新功能,而且我经常是最终发现错误的人.但我倾向于很快得到现有功能集的支持,并且很多人都关注支持我发送的电子邮件.因人而异.

  • 您对异议的观察是准确和公平的.我是这个项目的最大贡献者 - 这意味着我通常会添加我需要或受到启发的功能.我很快就会对错误做出回应.但是,我倾向于在很长一段时间内对特征请求进行咀嚼,因为我希望确保异议的身份不会丢失并且不会变得"臃肿".异议已被用于相对流行的应用程序中.根据与之关联的崩溃日志和我执行的性能测试,它不是导致崩溃或性能瓶颈的原因. (2认同)
  • 最后一件事.异议经过了很好的测试:https://github.com/atomicobject/objection/tree/master/Specs (2认同)

Tom*_*ner 11

好吧,我希望你原谅我一点插件,但我刚刚发布了自己的Objective-C DI框架:注射器

https://github.com/tomekc/Syringe

它的目的是简单和轻量级,我的主要目标是使其尽可能不突兀.我有很强的Java背景,所以我是在Google Guice和Spring之后设计的.

  • 推荐+1,即使是插件.如果你想要一个很好的方式来启动人们介绍DI(因为它是Objective-C世界中一个相当未开发的概念),请看一下[NInject的"入门"维基页面](https:// github .COM/ninject/ninject /维基/工具入门).NInject专注于构造函数注入而不是基于属性的注入,但是他们的教程构建DI概念的方式很有效. (2认同)