关于在Objective-C中包装C库的提示

时间:2009-08-23 23:57:58

标签: c objective-c wrapping

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

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

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

  • 有没有人有关于如何处理此事的任何提示?
  • 关于如何获得图书馆结构的直观层次结构的最佳方法的任何建议?
  • 我如何决定如何最好地构建包装器以实现可重用性和易用性?

非常感谢任何和所有帮助,谢谢!

3 个答案:

答案 0 :(得分:7)

我自己做了几次这样的事。这很有趣 - 这是你修复(或至少隐藏)不良代码的机会!

您可以使用Doxygen来获取代码的可视层次结构(尽管我只将它用于C ++库,它也适用于C),或者其他任何免费工具。

如果没有很好地设计或记录库,请不要像封装库那样构造包装类。您有机会考虑用户的观点以及他们将如何使用代码。首先编写您的测试用例以解决这个问题,和/或与已经使用该库的人交谈。

与您正在做的事情相匹配的两个不错的设计模式是AdapterFacade

答案 1 :(得分:2)

首先,请记住:C库 是一个Objective-C库。实际上你根本不需要进行任何包装,尽管如果库接口特别麻烦,你可能会想要它。

其次,如果您决定要编写库包装器,请保持简单。确定您实际计划使用的库的核心功能,并考虑如何最好地为这些功能和这些功能提供接口,并考虑您的预期用途。设计一个您想要使用的接口,然后通过库实现它。

答案 2 :(得分:0)

由于ARC(自动引用计数)已添加到Apple编译器和库中,因此Objective-C和C不再可以自由替换。 (Here's ARC文档和教程列表。)您需要更彻底地考虑内存分配问题,并且您可能只想“桥接”库。请参阅this SO question以及其中的一些链接,了解Apple如何在Obj-C和C库之间架起桥梁。