虽然很多地方都说Object C 是是C的超集,"Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. " 但是,在基本的语法和一些实现上还是有一定的区别的,本文是从工作中遇到的不同的部分整理如下:
1)Object C 的类只能继承一个类,不能继承多个类,如果要实现类似多个继承,需要使用Category和Extension, Extension是没有名字的Category,也就是匿名Category。
2)Object C从2011年引入了 Automatic Reference Counting (ARC),支持垃圾收集,不需要担心内存泄露的问题;而C++依然不支持,需要自己手工管理内存。
3) Object 不支持运算符重载,而C++支持;
4) 保留的关键字不一样;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的函数指针差不多。
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函数初始化对象和dealloc释放对象,没有构造函数和析构函数;而C++通过构造函数初始化对象,析构函数释放;
11) Object C虽然也支持泛型,但是一般不建议使用,会影响效率;而C++的STL、Boost则大量使用了泛型;
12) Object C初始化指针为空使用nil;C、C++使用NULL;
13) Object C没有虚拟继承;而C++有虚拟继承;
14) Object C由于不支持命名空间,所以,编译之后没有将类名mangle,经过查看bitcode,发现其实函数名也没有mangle;C、C++编译之后会把类和函数名字mangle;关于Name Mangling可以参考:https://en.wikipedia.org/wiki/Name_mangling#Demangle_via_c++filt
实际操作环境:XCode 11.4.1 & apple clange 11.0.3
15) Object C 类的成员函数调用使用的是消息机制,即使用指令objc_msgSend发送一个消息给指定的类和函数;而C、C++是直接调用mangle之后的函数名。关于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 确定一个文 件只能被导入一次;C、C++使用#include,并且无法去报一个文件不会被导入一次,因此需要在头文件中使用宏控制;
20) Object C支持反射机制,C、C++不支持
21) Object C中只有数据成员的访问限制,没有方法的访问限制;C、C++数据成员和方法都有访问控制(public、protected和private)。
22) Object C没有静态变量,有全局变量;C、C++两者都支持
23) Object C中的数组NSArray 可以保存不同类型的变量,而C++不可以;
24) Object C所有的类都必须继承于 NSObject;而C++对自定义的类的基类没有要求;
25) Objective C 提供了运行期动态绑定机制, 而 C++ 是编译时静态绑定;
后面遇到会持续更新......
参考:
https://www.tutorialspoint.com/objective_c/objective_c_quick_guide.htm
深信服防火墙SNMP开启步骤
在做爬虫的时候,有时候需要爬写中文的内容。但是中文字符在某些场合下会转为 %xx 形式的 URL 字符。比如:%E7%BE%8E%E5%A5%B3以上编码表示“美女”。Python3 的urllib 库,就可以对中文进行 URL编码和解码。import urllib.parsecn = input("请输入中文:")bfb = urllib.parse.quote(cn) # 转为 url 编码print( bfb )print( urllib.parse.unquo.
直接用maven打的包是无法用java -jar命令运行的 因为没办法找到入口类, 即main方法那么需要加上maven的插件配置<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3....
批次是物料管理中的常见概念,特别是在化工、制药、快消等行业,由于生产工艺或材料的原因,不同批次的产品或原料,在具体的属性上有区别,或出于保质期、质量追溯等原因,需要对同一物料,不同批次的产品或原料进行区别,那么,启用批次管理可以很好的达到此目的。一般来说,当同一物料每一采购批次或者生产批次都不尽相同时,才有必要启用批次管理,比如每一批次的价格,每一批次的生命周期,每一批次的颜色、重量、体积、尺寸等不
环境配置:两台服务器:pro_server:监控平台+分析展示平台,Linux系统oraclelinux 7.5版本exp_agent:被监控服务器,Linux系统oraclelinux 7.5版本软件版本:alertmanager-0.21.0.linux-amd64.tar.gznode_exporter-1.0.1.linux-amd64.tar.gzprometheus-2.20.1.linux-amd64.tar.gz运行前关掉linux的防火墙,两台服务器都要关掉...
题目描述Farmer John is throwing a party and wants to invite some of his cows to show them how much he cares about his herd. However, he also wants to invite the smallest possible number of cows, remembe...
登录页面,包含结构样式,以及登录和注册功能
建个QQ群作为大家技术交流的平台最近有很多读者来问我关于caffe的问题,由于我不搞caffe很久了,所以难以高效回答大家的问题。因此,建QQ群作为大家技术交流的平台。caffe,深度学习交流群:419906840机器学习,数据挖掘,推荐广告搜索交流群:126643980
关于“指向常量的指针”,“常量指针”,“指向常量的常量指针“三者的区分初学者在学习c++时,这三者容易让人混淆,其实仔细观察他们的写法区别,就很好区分 //一下内容均以int类型为例1.常量指针写法:int *const pi;理解:常量指针,即指针是常量,而指针本身就指向对象的地址.特点:1. 指针指向的地址不能改变 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;n...
为什么80%的码农都做不了架构师?>>> ...
点击上方 "编程技术圈"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!每日英文Nothing is impossible for a willing heart....
前言 本文针对的读者是有经验的C/C++程序员,希望了解Lua或者迅速抓住Lua的关键概念和模式进行开发的。因此本文并不打算教给读者条件语句的语法或者函数定义的方式等等显而易见的东西,以及一些诸如变量、函数等编程语言的基本概念。本文只打算告诉读者Lua那些与C/C++显著不同的东西以及它们实际上带来了怎样不同于C/C++的思考方式。不要小看它们,它们即将颠覆你传统的C/C+