用Objective-C封装C库的技巧

5
我有一个用C语言编写的库,我想在Mac或iPhone上的Objective-C应用中使用它。
不幸的是,由于这个库是由开源社区的个人编写的,因此文档非常稀少和不完整。虽然我可以弄清楚如何使用库中的东西,但我并没有整个代码库的概述。
我想做的是将库封装成一些易于使用和可转移的Objective-C类。
以下是我的问题:
- 有人有什么建议吗? - 如何最好地获取库的结构层次? - 我该如何决定如何最好地构建包装器以实现可重用性和易用性?
非常感谢您的任何帮助!
3个回答

7

我自己也做过几次这样的事情。这很有趣 - 这是你修复(或至少隐藏)糟糕代码的机会!

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

如果库没有被设计或记录好,请不要像底层库一样构建包装类。这是您考虑用户观点以及他们如何使用代码的机会。首先编写您的测试用例以找出答案,并/或与一些已经使用库的人交谈。

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


2
+1. 首先,你应该定义一些漂亮的接口来实现你想要的功能,然后使用C库填写实现细节。 - Tom Dalling
当你说接口时,是指用户界面还是代码接口? - Jasarien

2

首先要记住:C库也是Objective-C库。你实际上根本不需要进行任何包装,尽管如果库接口特别复杂,你可能希望这么做。

其次,如果你决定要编写一个库包装器,请保持简单。确定你计划实际使用的库的核心函数,并考虑如何最好地为这些函数提供界面,只针对你打算使用的函数。设计一个你想要使用的界面,然后在该库上实现它。


0

自从苹果编译器和库添加了ARC(自动引用计数),Objective-C和C就不再那么自由地互换了。 (这里是ARC文档和教程的列表。)您需要更加彻底地考虑内存分配问题,您可能只想“桥接”库。请参见此SO问题以及其中的一些链接,了解苹果如何在Obj-C和C库之间进行桥接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接