【问题标题】:Creating your own custom libraries in iOS?在 iOS 中创建自己的自定义库?
【发布时间】:2012-09-02 22:35:31
【问题描述】:

我对编程还很陌生,想更有效地开始编程。尽我所能尝试我经常发现自己偏离了 MVC 模型。

我想知道在使用 xcode objc 进行编码时,有什么技巧或方法可以让您的代码井井有条吗?更具体地说(我知道你们喜欢这样:)我想

  1. 能够编写可以从一个项目带到另一个项目的库或自包含代码
  2. 将我的代码作为开源项目与他人共享
  3. 防止自己编写不符合正确结构的杂乱代码

【问题讨论】:

  • 如果你是编程新手,你应该从学习OOP的原理和实践开始,而不是跳入深渊。
  • 感谢您的快速回复。实际上,我已经编写了几个应用程序。我已经阅读了几乎所有的苹果文档并观看了 WWDC 视频。我想我了解基本原则,但我无法将它们付诸实践。我想知道是否有一些最佳实践可供这里更有经验的程序员传授给像我这样的新手。
  • @VXtreme 如果这是最好的选择,是的。主要是我希望能够重用代码并加快我的开发速度。我发现自己陷入了细节之中,然后变得杂乱无章。据我了解,静态库最适合更新代码,但正确引用可能会很痛苦。

标签: objective-c ios xcode model-view-controller shared-libraries


【解决方案1】:
  • 使用高警告级别。干净利落地构建。
  • 删除所有静态分析器问题。
  • 编写一些单元测试。
  • 保持公共接口小。
  • 指定库的依赖项(例如,最低 SDK 版本和依赖库)。
  • 定期针对多个/支持的操作系统版本进行编译。
  • 学习创建和管理静态库目标。这就是您在另一个项目中支持和重用该库所需要的全部内容(除非您将外部资源拖到图片中,这会变得很痛苦)。
  • 没有全局状态(例如单例、全局变量)。
  • 在多线程上下文中的支持要准确(更常见的是,并发应由客户端负责)。
  • 记录您的公共界面(也可能是您的私人界面……)。
  • 定义精确且统一的误差模型。
  • 错误检测永远不够。
  • 设定非常高的标准 -- 构建它们以作为参考实现重用。
  • 尽早确定库的粒度。这些应该非常小且重点突出。
  • 考虑为您的后端/核心库使用 C 或 C++ 实现(这些东西可以被剥离)。
  • 请为您的库的 objc 类和类别建立和指定任何前缀。也使用好的前缀。
  • 尽量减少可见的依赖关系(例如,不要#import 吨可能被隐藏的框架)。
  • 确保它编译时客户端不需要添加额外的#imports。
  • 不要依赖客户将东西放在特定的位置,否则资源会有特定的名称。
  • 对内存消耗和执行成本要非常保守。
  • 没有泄漏。
  • 没有僵尸。
  • 主线程上没有慢速阻塞操作。
  • 在经过良好测试并且已经稳定一段时间之前不要发布。错误会破坏客户的代码,如果它不断破坏他们的程序,他们就不太可能重用您的库。
  • 学习、使用和学习好的库。
  • 请人(最好是比您更有经验的人)审查您的代码。
  • 请在项目中适当的地方使用/练习这些库。
  • 在添加功能之前修复错误。

不要让这吓到你——它真的很有趣,而且你可以在这个过程中学到很多东西。

【讨论】:

  • 谢谢!我将这些要点中的每一个都写在我的笔记本上,并详细说明以帮助我记住这个很棒的清单。编写代码并看到一个应用程序组合在一起绝对很有趣(这绝对令人抓狂)。我想退后一步,回顾一下我的习惯,看看我可以改进的地方。干杯。
  • @a4suited 不客气。学习编写好的库可能需要数年时间,但拥有在许多情况下可靠运行的程序是一件好事——只要留意代码重复并考虑重复代码属于你的库:)
【解决方案2】:

您可以通过多种方式重用代码:

  • 将代码存储在一个公共目录中,并将该目录包含在您的项目中。简单,但可能存在版本控制问题。
  • 创建一个单独的项目,该项目构建一个静态 iOS 库,然后创建一个框架。设置更复杂,因为它涉及构建框架目录结构的脚本。但易于在其他项目中使用,并且可以处理版本控制和设备/模拟器组合库。
  • 创建一个单独的项目,该项目构建一个静态 iOS 库,然后将其作为子项目包含在其他项目中。避免构建框架,结果可以更加优化。

这是基本的 3,当然还有许多变体以及如何处理它们。你决定做的很多事情都取决于你要为谁做这件事。例如,我喜欢我自己的代码的子项目,但对于我想为其他人提供的代码,我认为框架更好。即使他们有更多的工作要做。另外,我可以用 api 文档的文档集将它们包装起来,并将整个文件作为 DMG 上传到 github 供其他人下载。

【讨论】:

  • 谢谢!我相信你在建议框架时是对的,但这可能是我以后要解决的问题。我尽最大努力编写干净的代码,更不用说脚本框架了。不过,这绝对是我希望在某个时候解决的问题。感谢您的提示。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多