建议使用Objective-C类的C类最小化使用Objective-C?

建议使用Objective-C类的C类最小化使用Objective-C?,第1张

概述我正在混合Objective-C和C.但是我想尽量减少使用Objective-C.因为它在Objective-C和C中都有某种限制. 目前,我正在使用它. // A.h, Objective-C#import "B.h"@interface A{ B* b;}@end// B.h, Objective-C++@interface B{ void* c;}// 我正在混合Objective-C和C.但是我想尽量减少使用Objective-C.因为它在Objective-C和C中都有某种限制.

目前,我正在使用它.

// A.h,Objective-C#import "B.h"@interface A{    B* b;}@end// B.h,Objective-C++@interface B{    voID* c;}// C.h,C++class C{};

我想把C.h包括在B.h中,但如果我这样做,那么B.h就不能被导入A.h.所以我必须将变量c保留为voID *类型.这不是一个大问题,因为我可以自由地使用B.m文件中的C成员.但我总是要施展它.这感觉不清楚.所以我想用更好的方法.

解决方法 有几种方法可以做到这一点,但在我看来,最好的方法是使用 ‘PIMPL’ idiom,这在C中很常见.使标头纯粹是Objective-C和纯C,带有指向包含实际实现的前向声明结构的指针.这是在.mm文件中定义的,然后可以使用Objective-C.

在您的示例中,您将执行以下 *** 作:

// B.h,pure Objective-C:struct BImpl;@interface B{    struct BImpl* impl;}// ...// B.mm,mixed:#include "C.h"struct BImpl // since this is C++,it can actually have constructors/destructors{    C* my_c;    BImpl() : my_c(new C) {}    ~BImpl() { delete my_c; my_c = NulL; }};// make sure to alloc/initialise impl (using new) in B's init* methods,// and free it (using delete) in the dealloc method.

我实际上写了一篇关于解决这个问题的文章,你可能会发现它很有用:http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects – 它还展示了其他一些方法,包括你原来的voID *方法.

总结

以上是内存溢出为你收集整理的建议使用Objective-C类的C类最小化使用Objective-C?全部内容,希望文章能够帮你解决建议使用Objective-C类的C类最小化使用Objective-C?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243252.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存