Object-C 与C/C++的区别
雖然很多地方都說Object C 是是C的超集,"Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.?" 但是,在基本的語法和一些實現(xiàn)上還是有一定的區(qū)別的,本文是從工作中遇到的不同的部分整理如下:
1)Object C 的類只能繼承一個類,不能繼承多個類,如果要實現(xiàn)類似多個繼承,需要使用Category和Extension, Extension是沒有名字的Category,也就是匿名Category。
2)Object C從2011年引入了?Automatic Reference Counting (ARC),支持垃圾收集,不需要擔(dān)心內(nèi)存泄露的問題;而C++依然不支持,需要自己手工管理內(nèi)存。
3) Object 不支持運算符重載,而C++支持;
4) 保留的關(guān)鍵字不一樣;Object C:?weak?NSObject?NSInteger?NSNumber等;
5)Object C有block的概念,如下代碼:
double (^multiplyTwoValues)(double, double) = ^(double firstValue, double secondValue) {return firstValue * secondValue;};double result = multiplyTwoValues(2,4); NSLog(@"The result is %f", result);感覺和C的函數(shù)指針差不多。
6)Object C 和 C/C++都有 指針的概念,但是,指針的使用卻不同。
例如:?
Object C:
Box *box1 = [[Box alloc]init];
box1.height = 5;
C、C++:
Box *box1 = new Box();
box1->height = 5;
7) Object 有?Protocol,C/C++沒有。Protocol的定義是:?Objective-C allows you to define protocols, which declare the methods expected to be used for a particular situation. Protocols are implemented in the classes conforming to the protocol
8)Object C的for語句,支持Fast enumeration Syntax,而C語言不支持
for (classType variable in collectionObject ) { statements }9) Object 不支持命名空間,而C/C++支持命名空間。
10)Object C 的類需要聲明init函數(shù)初始化對象和dealloc釋放對象,沒有構(gòu)造函數(shù)和析構(gòu)函數(shù);而C++通過構(gòu)造函數(shù)初始化對象,析構(gòu)函數(shù)釋放;
11) Object C雖然也支持泛型,但是一般不建議使用,會影響效率;而C++的STL、Boost則大量使用了泛型;
12) Object C初始化指針為空使用nil;C、C++使用NULL;
13) Object C沒有虛擬繼承;而C++有虛擬繼承;
14) Object C由于不支持命名空間,所以,編譯之后沒有將類名mangle,經(jīng)過查看bitcode,發(fā)現(xiàn)其實函數(shù)名也沒有mangle;C、C++編譯之后會把類和函數(shù)名字mangle;關(guān)于Name Mangling可以參考:https://en.wikipedia.org/wiki/Name_mangling#Demangle_via_c++filt
實際操作環(huán)境:XCode 11.4.1 & apple clange 11.0.3
15) Object C 類的成員函數(shù)調(diào)用使用的是消息機制,即使用指令objc_msgSend發(fā)送一個消息給指定的類和函數(shù);而C、C++是直接調(diào)用mangle之后的函數(shù)名。關(guān)于demangle可以參考:https://github.com/gimli-rs/cpp_demangle。
16) Object C 類本身使用self,C++使用this;
17)? Object C 對于類型不確定的對象可以使用id表示,C、C++使用Void *;
18)?Object C 使用YES/NO表示TRUE/FALSE,
19)?Object C 使用#import引入其他文件,#import 確定一個文 件只能被導(dǎo)入一次;C、C++使用#include,并且無法去報一個文件不會被導(dǎo)入一次,因此需要在頭文件中使用宏控制;
20) Object C支持反射機制,C、C++不支持
21) Object C中只有數(shù)據(jù)成員的訪問限制,沒有方法的訪問限制;C、C++數(shù)據(jù)成員和方法都有訪問控制(public、protected和private)。
22)?Object C沒有靜態(tài)變量,有全局變量;C、C++兩者都支持
23)? Object C中的數(shù)組NSArray 可以保存不同類型的變量,而C++不可以;
24) Object C所有的類都必須繼承于 NSObject;而C++對自定義的類的基類沒有要求;
25)?Objective C 提供了運行期動態(tài)綁定機制, 而 C++ 是編譯時靜態(tài)綁定;
?
后面遇到會持續(xù)更新......
? ? ? ?
參考:
https://www.tutorialspoint.com/objective_c/objective_c_quick_guide.htm
http://cocoadevcentral.com/d/learn_objectivec/
總結(jié)
以上是生活随笔為你收集整理的Object-C 与C/C++的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux镜像迅雷下载,【转】红帽 Re
- 下一篇: HDFView打开.h5文件时报错Fai