C++与Objective-C的区别

来源:互联网 发布:sqlserver distinct 编辑:程序博客网 时间:2024/05/29 17:38

一,面向对象

1,继承

C++:有单继承与多继承。

Objective-C:只有单继承,但是一个类可以实现多个协议。


2,接口

C++:没有提供专门的关键字来声明接口,但是可以定义抽象类。

Objective-C:可以使用@protocol关键字来声明协议,协议就是其他语言中的接口。


3,多态

C++:使用虚函数来实现多态,基类声明一个虚函数,派生类覆盖基类的虚函数。

Objective-C:没有虚函数,只要派生类覆盖基类的函数,就可以实现多态。


4,super关键字

C++:没有super关键字,想在派生类中访问基类的方法,可以使用基类名::,来访问基类的方法。

Objective-C有super关键字,可以直接使用这个关键字,在派生类的方法中访问基类的方法。


二,内存管理

1,C++

使用new/delete进行内存的动态分配与释放,内存是手动的申请与释放的,并没有提供内存回收机制。如果应用的不好,很容易导致内存泄露。


2,Objective-C

使用ARC来管理内存,创建对象使用的是new运算符,但是我们不用手动释放掉我们创建的对象。系统会为动态创建的对象设置一个引用计数,当有别的指针指向这个对象时,对象的引用计数加1。当其中指向这个对象的指针的生命周期结束时,对象的引用计数减1。当对象的引用计数为0时,系统会自动的回收对象的内存空间。使用ARC大大减轻了程序员的内存管理工作,同时也减少了内存泄露情况的的发生。


三,匿名函数

1,语法不同

C++:使用lambda表达式来创建匿名函数。例如:

[捕获](参数列表)->返回类型{    //函数体}

Objective-C:使用block语法来创建匿名函数。例如:

^(参数列表){    //函数主体}

2,创建有名称的匿名函数的方式不同

C++:使用auto关键字来创建有名称的匿名函数

auto add = [](int x, int y)->int{      return x + y;  };  


Objective-C:跟创建函数指针的语法类似

void (^block)(int) = ^(int x){NSLog(@"%ld", x);}; 


3,捕获局部变量时的行为不同

C++:使用引用捕获,可以对局部变量进行读写操作;使用按值捕获,只能访问不能对原来的值进行修改。

Objective-C:块对象可以使用局部变量的值,但是不能对它进行修改,否则会出现编译错误。


原创粉丝点击