Objective-C与C++的区别
1、两者的最大相同:都是从C演化而来的面相对象语言,两者都兼容标准C语言
2、两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数(虚表)来模拟实现。Objective-C在语言层次上支持动态消息转发,其函数调用语法为[objece message],而且C++为object->function()。两者的语义也不同,在Objective-C里是说发送消息给 一个对象,至于这个对象能不能处理消息以及是处理还是转发都不crash,而在C++里是说对象进行了某个操作,如果对象没有这个操作的话,要么编译会报错(静态绑定),要么程序会crash掉的(动态绑定)。
3、Objective-C不支持多继承,而C++支持。不过Objective-C通过protocol(协议)和category可以更优雅地实现这一特性。这一点也包括了overwriting(覆盖)和overloading(重载)两者的不同。
4、函数名字解析也不同,Objective-C的函数名字解析是函数名称+参数名称,而C++只包扩函数名称。因此在Objective-C中以下是合法的,因为两者解析出来分别类似于foo:bar1:和foo:bar2:,是不同的;
-(int)foo:(int) bar bar1:(int) bar;
-(char*)foo:(int) bar bar2:(int)bar;
而在C++中以下是非法的,编译时将出错,因为两者解析出来都是类似于foo:int,编译器无法识别。
int foo(int bar,int bar1);
char* foo(int bar,int bar2);
5、Objective-C没有C++里有的构造函数和析构函数,其对应物为alloc、init/free.
6、Objective-C 2.0加入了垃圾回收机制(在iPhone和iPad上不可用),而C++没有
7、Objective-C不允许在Stack上分配内存,只能在heap上进行,而C++两者都允许。
8、Objective-C不支持引用,而C++支持
9、Objective-C不支持模版,而C++支持
10、Objective-C时Smalltalk系的,而C++是Simula系的。
可以这么说,Objective-C在C之上进行了一层简单的包装,而C++在C之上进行了复杂的包装,但是Objective-C感觉更优雅简洁。
Objective-C与C++的区别的更多相关文章
- Objective C assign© & retain区别
什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 re ...
- objective c,copy, mutableCopy区别
copy总是返回不能被修改的对象,mutableCopy返回可以被修改的对象 例: NSArray *array = @[@"test", @"test2"]; ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Objective C类方法load和initialize的区别
Objective C类方法load和initialize的区别 过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...
- Objective C语言中nil、Nil、NULL、NSNull的区别
以下内容是基于搜集整理的网上资料,供参考. nil:指向Objective C语言中对象的空指针,其定义值为(id)0. Nil:指向Objective C语言中类(Class)的空指针,其定义值为( ...
- Objective C中nil/Nil/NULL的区别
nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 若obj为nil:[obj messa ...
- Objective-C( Foundation框架 一 字符串)
Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...
- Objective C笔记(第一天)
• OC语言概述 1.早在20世纪80年代早期,Bard Cox发明了Objective C, 是扩充的C,面向对象的编程语言. 2.NEXTSTEP简称NS a.1985年,Steve Jobs成⽴ ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
随机推荐
- YTU 2972: C语言习题5.24--文件操作1
2972: C语言习题5.24--文件操作1 时间限制: 1 Sec 内存限制: 128 MB 提交: 248 解决: 94 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...
- MySQL常用操作总结
MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...
- Jquery中的filter()详细说明和transition的用法
filter() 方法将匹配元素集合缩减为匹配指定选择器的元素. 详细说明 如果给定表示 DOM 元素集合的 jQuery 对象,.filter() 方法会用匹配元素的子集构造一个新的 jQuery ...
- JS实现base64编码与解码
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ...
- CSU 1325: A very hard problem 中南月赛的一道题。
1325: A very hard problem Time Limit: 3 Sec Memory Limit: 160 MBSubmit: 203 Solved: 53[Submit][Sta ...
- COM技术の组件
什么是COM COM,Component Object Mode即组件对象模型.之所以称之为“模型”,是表明COM是一种编程规范(非具体代码),通过这种规范我们能够编写出语言无关的,可扩展的,内部变化 ...
- combotree的加载方法
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- HTML 的 <div> 和 <span> 标签
这篇文章里会涉及到两个术语,这里先明确一下: 块级元素,block level element 内联元素(或者叫行内元素),inline element 大多数 HTML 元素被定义为块级元素和内联元 ...
- python学习笔记五 模块上(基础篇)
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
- spark记录
Filtering multiple values in multiple columns: In the case where you're pulling data from a database ...