Object-c 集成 C&C++ 评测

正在进行中的产品开发是基于苹果的iOS操作系统,自然而然,需要去熟悉和了解如何评估、选择和使用开源项目的代码。

整理内部知识管理平台上留下来的一些开发/集成记录,简单的需要考虑或者侧重以下几个方面:

  • C代码开发的项目集成最为方便,源代码加入xcode的项目中,整理出正确的编译指令相关的宏定义,一般被集成项目的编译即可通过。这也是目前我唯一实际成功过的集成方式。也可以使用链接库的方式,但是目前为了简便发布工作,没有研究和使用。
  • C++代码开发的项目,理论上可以集成到Objective-C项目中,参考资源: How to wrap a C++ lib in objective-C?。相比C代码集成,项目中特殊化处理的部分复杂的多。使用链接库理论上也是可行的,但仅仅是推测。
  • 被集成的项目,最好只使用标准C库中的API,外部依赖越少越好;C语言的使用,越符合ANSI标准越好。

具体到C代码项目的集成:

  • 功能较为复杂的被集成项目,为了降低后续开发中使用、维护的成本,“隔离”外部API的调整和变动,一般需要用Objective-C进行OO方式的封装。
  • C代码.h头文件中遇见较复杂的struct定义,一般意味着这个结构体为核心数据结构,可以围绕该结构体进行封装,设计相应的Class类型。
  • C项目中的“动态特性”,回避不了无类型指针和函数指针的使用,尤其在各种回调/通知函数中。集成过程中的原则是:回调函数中的无类型指针,正好用来传递OO封装后的Class类型的实例;在回调函数内部(或者在申明时即可使用该策略,同样满足编译器检查),将指针还原到实例的Class类型(typecast),然后再调用相应的成员方法。这样就将全局的函数指针与具体的Class实例的成员方法“联系”起来,解决Objective-C定义的Class,成员方法无法获得函数指针的问题。

对于最后一点,一小段代码解释起来会更清楚:

正在进行中的产品开发是基于苹果的iOS操作系统,自然而然,需要去熟悉和了解如何评估、选择和使用开源项目的代码。

整理内部知识管理平台上留下来的一些开发/集成记录,简单的需要考虑或者侧重以下几个方面:

  • C代码开发的项目集成最为方便,源代码加入xcode的项目中,整理出正确的编译指令相关的宏定义,一般被集成项目的编译即可通过。这也是目前我唯一实际成功过的集成方式。也可以使用链接库的方式,但是目前为了简便发布工作,没有研究和使用。
  • C++代码开发的项目,理论上可以集成到Objective-C项目中,参考资源: How to wrap a C++ lib in objective-C?。相比C代码集成,项目中特殊化处理的部分复杂的多。使用链接库理论上也是可行的,但仅仅是推测。
  • 被集成的项目,最好只使用标准C库中的API,外部依赖越少越好;C语言的使用,越符合ANSI标准越好。

具体到C代码项目的集成:

  • 功能较为复杂的被集成项目,为了降低后续开发中使用、维护的成本,“隔离”外部API的调整和变动,一般需要用Objective-C进行OO方式的封装。
  • C代码.h头文件中遇见较复杂的struct定义,一般意味着这个结构体为核心数据结构,可以围绕该结构体进行封装,设计相应的Class类型。
  • C项目中的“动态特性”,回避不了无类型指针和函数指针的使用,尤其在各种回调/通知函数中。集成过程中的原则是:回调函数中的无类型指针,正好用来传递OO封装后的Class类型的实例;在回调函数内部(或者在申明时即可使用该策略,同样满足编译器检查),将指针还原到实例的Class类型(typecast),然后再调用相应的成员方法。这样就将全局的函数指针与具体的Class实例的成员方法“联系”起来,解决Objective-C定义的Class,成员方法无法获得函数指针的问题。

对于最后一点,一小段代码解释起来会更清楚:

//header C source file.
typedef int (iksFilterHook)(void *user_data, ikspak *pak);

//Objective-C implementation source file.
int iks_iq_packet_on_result_filter(JabberClient * jabberClient, ikspak *pak) 
{
  NSLog(@"xmpp iq result packet received, id: %s", pak->id);
  return [jabberClient onXMPPIQPacketArrived:pak];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值