C语言是一个面向过程的语言,Objective-C是一个面向对象的语言,也就是我们在Objective-C中我们有了类的概念。
一、两者比较突出的特性:
C语言的指针、OC语言的运行时、消息制
C语言中最经典的是它的指针概念,这一特性也让Objective-C 的内部类型体现出来了:
在Objective-C中我们没有“函数”之说,我们叫方法(Method)和发送信息(send message),因为Objective-C的方法是一种消息制,这也是因为它是运行时语言的特性之一,它的SEL就像一个符号,在c语言中我们的函数都是有函数指针指向的,但Objective-C是在类的实例对象中查找方法符号表,再找到对应的位置,这时的方法名似乎也不叫做函数指针的,因为保存的不是地址。这个得继续细细研究。-_-
二、两者的语言特性上
Objective-C其实是兼容C语言的,C的一些类型,Objective-C也有,我们知道 foundation框架是OS的基础框架,有数据类型、集合、操作系统功能的服务层。
UIKit虽然看起来是只是很多界面啥的,实际上是provides most of the objects in the controller and view layers of your app, 所以,也就是很多关于界面上的组成数据类型/相关类都有,至少我的经验就是CGFloat在import <Foundation/foundation.h>时是错误的,但是导入了UIKit之后就可以,因为看文档也可以知道,Foundation感觉就是再次封装了一层,当然CGFloat可以用NSNumber来进行对象表示,但是并不是很直观对不,所以我们通常还是会用到CGfloat这些基础类型的,我们来了解一下C语言和OC语言的类型吧!
Objective-C的数据类型有
基础数据类型: 数值型【整型类型、浮点型】、 字符型【char】 、布尔型【Bool(字面常量值是YES或者NO)(注意BOOL和bool))的区别】,空类型【void】
Block 类型
指针类型 :类【class】 、 类型【id(id 也能在c语言中声明)】
特殊类型 :【SEL】 【nil】
C的数据类型:
C语言的数值数据类型:(当然unsigned 和 signed 会对它们造成长度的影响)
整型: 【short、 int、 long、long long】、 字符型【char 】 浮点型 【float、 double、long double】
宽字符类型(很少用到)【wchar_t】 、 枚举 【enum】 、 布尔变量(_Bool) 【bool (非零就是true)】、
复数类型(基本很少用到了)【a+bi】
三、关键字的不同
C语言的关键字:
auto、double \ int \ struct \ break \ else \ long \ switch\ case \ enum \ register \ typedef \ char \ extern \ return \union \ const\ float \ short \ unsigned \ continue \ for \ signed \ void\ default \ goto \ sizeof \ volatile \ do \ if \ while \ static \ NULL
Objective-C 关键字:
@interface \ @implementation \ @end\ @public \ @protected \ @private \ @selector \ @try \ @catch \ @throw\ @finally\ @protocol @optional\ @required\ @class\ @property\ @synthesize \ @dynamic \ BOOL \ Class \ SEL \ YES \ NO \ id \ self\ super\ nil \ atomic\ nonatomic\ retain \ assign \ copy \ block\ weak \ strong\unsafe_unretained\readOnly\readWrite
C语言的关键字都可以在Objective-C源程序中使用
四、 导入文件的关键字不同
C语言是 :
include
Objective-C 是:
import
这两者的区别一直都有介绍哈:
可以说import 是include_once 的变体,就是不会重复导入,
五、 for循环
Objective-C增加了一个快速遍历的特性,这一特性真的很方便
for ( id Object in Objects ){
// object can do something
}
六、打印
C 语言:printf("")
Objective-C NSLog("")
这两个的对比,就是NSLog有换行结束符\n,printf没有换行结束符
网友评论