zoukankan      html  css  js  c++  java
  • C++、Objective-C 混合编程

    在XCODE中想使用C++代码,你须要把文件的扩展名从.m改成.mm。这样才会启动g++编译器。

    我们来看个測试代码:

    [java] view plaincopy
    1. class TestC {  
    2. private:  
    3.     NSString *str_;//C++类能够使用OC对象作为成员变量  
    4.       
    5. public:  
    6.     TestC() {  
    7.         str_ = @"hi mc0066.";//构造函数内能够使用OC对象来赋值  
    8.     }  
    9.     TestC(NSString *str) {//函数能够接收OC对象(通过函数參数)  
    10.         str_ = str;  
    11.     }  
    12.     TestC(NSInteger num) {  
    13.         str_ = [NSString stringWithFormat:@"%d",num];//C++函数能够调用OC方法  
    14.     }  
    15.     void show() {  
    16.         printf("%s ",[str_ UTF8String]);  
    17.         NSLog(@"str_ is:%@ ",str_);  
    18.     }  
    19. };  
    这是我写的C++类,类内部使用了OC的代码。依据測试能够确定下面几点:

    1. C++函数内能够调用OC方法、能够创建OC对象、函数參数能够为OC对象。

    2. C++类的成员变量能够是OC对象。

    事实上,在混编时,OC和C++的对象都是单纯的指针。所以能够随意的彼此调用对方的方法、使用对方的内部数据。


    再来看看OC中是怎样使用C++代码的:

    [java] view plaincopy
    1. @interface TestOC : NSObject  
    2. {  
    3.     TestC *c;//能够使用C++对象作为參数  
    4. }  
    5.   
    6. - (id)initTestOC;  
    7. - (void)testC;  
    8.   
    9. @end  
    10.   
    11. @implementation TestOC  
    12.   
    13. - (id)initTestOC{  
    14.     if ((self = [super init])) {  
    15.         c = new TestC();//以C++语法调用构造函数  
    16.     }  
    17.     return self;  
    18. }  
    19.   
    20. - (void)testC{  
    21.     c->show();//调用C++类的内部函数  
    22. }  
    23.   
    24. - (void)dealloc{  
    25.     delete c;//用完 记得删除C++对象,避免内存泄露  
    26.     [super dealloc];  
    27. }  
    28.   
    29. @end  
    和之前分析c++类没啥差别,毅然是能够使用c++的语法 能够使用c++的方法和成员。

    另一点要注意,OC类无法继承C++类,C++也一样。

    由于oc类的结构和c++类结构不同,所以才导致该问题。

  • 相关阅读:
    前端 整理的待学习技术点
    为Xamarin更好的开发而改写的库
    C#函数式编程之可选值
    C#函数式编程之序列
    C#函数式编程之标准高阶函数
    C#函数式编程之递归调用
    C#函数式编程之缓存技术
    C#函数式编程之惰性求值
    C#函数式编程之部分应用
    Xamarin.Android之动画
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6747110.html
Copyright © 2011-2022 走看看