在 Objective-C 中封装 C 库的技巧

2024-01-08

我有一个用 C 编写的库,我想在 Mac 或 iPhone 上的 Objective-C 应用程序中使用它。

不幸的是,由于该库是由开源领域的个人编写的,因此文档非常稀疏且不完整。虽然我可以弄清楚如何使用库中的内容,但我并没有真正了解整个代码库。

我想做的是将库包装成 Objective-C 中一些易于使用和可转移的类。

  • 有人对如何解决这个问题有任何建议吗?
  • 关于获得图书馆结构的视觉层次结构的最佳方法有什么建议吗?
  • 我将如何决定如何最好地构造包装器以实现可重用性和易用性?

任何和所有的帮助将不胜感激,谢谢!


我自己也做过几次这样的事。这可能很有趣——这是您修复(或至少隐藏)错误代码的机会!

您可以使用Doxygen http://www.doxygen.nl/获得代码的可视化层次结构(虽然我只将它用于 C++ 库,但它也适用于 C),或任何其他免费工具。

如果库的设计或文档不完善,则不要像底层库一样构建包装类。这是您考虑用户的观点以及他们将如何使用代码的机会。首先编写测试用例来弄清楚这一点,和/或与一些已经使用该库的人交谈。

与您正在做的事情相匹配的两种很好的设计模式是Adapter http://en.wikipedia.org/wiki/Adapter_pattern and Facade http://en.wikipedia.org/wiki/Facade_pattern.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Objective-C 中封装 C 库的技巧 的相关文章

随机推荐

  • 使用 JSON 将嵌套对象发布到 Spring MVC 控制器

    我有一个控制器 其 POST 处理程序定义如下 RequestMapping value ajax saveVendor do method RequestMethod POST public ResponseBody AjaxRespon
  • Dask 分布式工作线程在运行许多任务时总是会泄漏内存

    有哪些策略可以解决或调试这个问题 distribution worker 警告 内存使用率很高 但工作线程没有数据可存储到磁盘 也许其他进程正在泄漏内存 进程内存 26 17 GB 工作内存限制 32 66 GB 基本上 我只是在一台机器上
  • Ember.Object 实例中必需的属性(构造函数参数)

    在 Ember 中 假设我有一个名为FoodStuff它有几个属性 export default Ember Object extend name null REQUIRED Slice of Apple Pie calories null
  • 使用 jQuery 使用 WCF 服务

    到目前为止 我已经使用了 Web 服务 并且运行良好 我添加了一个新的 WCF 服务 我正在使用 jQuery 调用服务 这就是我使用 jQuery 来使用 Web 服务的方式 ajax dataType json processData
  • 如何在reducer中处理redux-form/CHANGE

    推荐的处理方式是什么redux form CHANGE动作由 redux form 调度 我有自己的减速器来管理此表单的状态 但我不确定是否最好执行以下操作 export default reducer state initialState
  • WHOIS 命令未返回有用信息?

    如今 每当您使用 WHOIS 命令时 都不会返回任何有用的信息 我通常必须去 Godaddy Dnsstuff 或其他服务来获取数据 据我了解 原因主要是由于垃圾邮件 我只是想知道其他服务如何获取这些数据 他们使用不同类型的 WHOIS 命
  • 插入 SQL 数据库之前检查重复项

    所以我一直在做一些研究 我需要写一份INSERT语句将唯一的客户端名称插入到我的服务器上的表中 然而 数据库的默认标准已经有数千个客户端 当插入新客户端时 我们需要在尝试将其添加到系统之前检查它们是否已经存在 我的问题是最好 最快的方法是什
  • 在 JavaFX 中右键单击?

    如何检测 处理 JavaFX 中的右键单击 这是一种方法 import javafx stage Stage import javafx scene Scene import javafx scene shape Rectangle imp
  • 尝试导入sql文件时出现表已存在错误

    我正在尝试通过 phpMyAdmin 上传备份 sql 文件 创建与 phpMyAdmin 中的导入文件具有相同数据库名称的空数据库 然后使用从此空数据库中选择的导入函数 我收到以下错误消息 1050 Table db t already
  • JPA Native 查询获取单个对象

    如何使用 JPA Native 查询获取单个对象 我做了一些研究 但所有给出的答案都是使用 getSingleResult 但它没有返回我想要得到的东西 例如 如果我想获取数据库中表的计数并将其提取到整数中 我该怎么办 下面的代码显示了我如
  • Nginx 使用 CORS 和凭据

    我正在构建一个通过 Nginx 服务器与 Laravel API 进行通信的 Web 应用程序 我尝试按照 Nginx 网站上的说明进行操作完全开放的科尔斯 https enable cors org server nginx html 但
  • 无法解析符号 WebSecurityConfigurerAdapter

    我尝试在我的 java 应用程序中创建基本身份验证 对于他们 我在 gradle 文件中使用了这个依赖项 dependencies compile group org springframework boot name spring boo
  • Netlogo HPC CPU 使用百分比增加

    我通过以下方式使用无头 NetLogo 将作业提交到 HPC 服务器code bin bash N r20p q all q pe mpi 24 home abhishekb netlogo netlogo 5 1 0 netlogo he
  • RuntimeException 未安装 Zip PHP 扩展

    我是 Linux 新手 我刚刚安装了 Composer 和 Laravel 但是当我运行laravel new project我收到以下错误 RuntimeException The Zip PHP extension is not ins
  • 如何将 Jupyter 中的数据框导出为 csv 文件

    我有一个数据框另存为df在 jupyter 笔记本中 我想将其导出到桌面上的 csv 文件中 对于 pandas 数据框 您可以使用df to csv data csv https pandas pydata org pandas docs
  • 已发布并等待 RabbitMQ / EasyNetQ 主题的回复 - 如何仅获取您的主题?

    当发布者期望得到消息的答案时 如何确保在扩展时它只能得到 与其自己的消息相关的 答案 我们有一个客户端进程 它发布一条消息以供服务器进程应答 此外 我们有一个 监听器 进程 只需要消耗问题和答案 而不需要发布任何内容 此外 服务器进程将来可
  • 如何在量角器中等待元素启用

    尝试单击按钮时量角器失败 最初 该按钮将处于禁用状态 稍后它将被启用 量角器认为该按钮已准备好并单击该按钮并失败 所以我希望量角器脚本等到按钮启用 我在下面尝试过 但没有成功 有人可以发布完整的代码来等待该元素被启用吗 expect bro
  • Apple 是否提供其使用的本地化术语索引?

    Apple 是否为开发者提供了一套不同语言的标准术语 我之所以问这个问题 是因为我正在对应用程序的部分内容进行本地化 并且希望在整个应用程序中一致应用标准术语 我采用了一些策略 通过更改设备上的语言并观察 Apple 如何用其他语言解释这些
  • 从 R 读取 .npz 文件

    I save npz来自 Python 的文件并想在 R 中读取它 我尝试使用npyLoad功能 但我收到此错误 library RcppCNPy Data lt npyLoad xx npz Error in npyLoad xx npz
  • 在 Objective-C 中封装 C 库的技巧

    我有一个用 C 编写的库 我想在 Mac 或 iPhone 上的 Objective C 应用程序中使用它 不幸的是 由于该库是由开源领域的个人编写的 因此文档非常稀疏且不完整 虽然我可以弄清楚如何使用库中的内容 但我并没有真正了解整个代码