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:块对象可以使用局部变量的值,但是不能对它进行修改,否则会出现编译错误。
- Objective-C 与 C++ 的区别
- Objective-C 与 C++ 的区别:
- Objective-C 与 C++ 的区别
- Objective-C 与 C++ 的区别
- c++与Objective-c的区别
- Objective-C 与 C++ 的区别:
- core foundation与objective-c的区别
- Objective-C @class与#import的区别
- Objective-C:#include与#import的区别
- Objective-C方法与函数的区别
- Objective-C 与 C++ 的区别
- C++与Objective-C的区别
- C/C++与Objective-C的区别(转载)
- Objective-C中nil与release的区别与用法
- Objective-C中nil与release的区别与用法
- Objective-C中nil与release的区别与用法
- Objective-C中nil与release的区别与用法
- Objective-C中nil与release的区别与用法
- java设计模式六大原则之场景应用分析
- 纯c++读取与显示BMP图片
- redis设计与实现 读书笔记1
- 坐拥823亿美元坐拥823亿美元财富,贝索斯日常修炼指南
- Android保持屏幕常亮的三种方法
- C++与Objective-C的区别
- MSM平台AP/CP通信机制
- window下Python2.7和3.5共存以及两个版本下使用pip
- mysql查询int转字符类型
- 82. Remove Duplicates from Sorted List II
- vue npm/cnpm install或者npm run dev 报错解决思路之一
- 使用wireshark抓取解密https包
- Sass 的控制命令
- 链接优化