在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关于C、OC、C++、OC++、Swift的一些常识
OC是C语言的一个超集,是一门面向对象的语言,因为苹果的崛起而火,API主要是cocoa(OSX)和cocoatouch(iOS),GCC 和 Clang 都能编译OC,现在xcode使用的是Clang。
OC的实现是建立在运行时机制(runtime system)之上的(runtime system 使用C写的),这使它与C++的编译机制有很大区别。 简单来说就是OC代码执行的时候需要结合runtime library,实现它的功能。正是因为如此,我们调用runtime的一些接口,动态地给OC的类添加方法,成员变量,交换两个方法。这些是在C++无法实现的,C++的代码执行,在编译的时候就已经决定了。
OC的内存管理,在OC没有像java那样的GC机制,它使用的是引用计数机制。下面细说: OC中定义一个对象: someClass *object = [[someClass alloc] init] ; someClass *otherObject = object; 上面的代码表示在堆(heap)里面申请了一块内存地址,用于存储someClass的一个对象,然后在当前栈里面分配2个指针的内存大小,用来存储两个指向someClass内存地址的变量。栈里面分配的内存,随着栈被pop,内存自动释放,而heap里面,则是使用引用计数机制来管理,这种功能也是由runtime提供的。 具体来说就是当有一个指针变量指向someClass对象在heap里面的地址时,这个对象的count就是1,上面代码中count就是2. 当这个对象的count变成0时,这个对象在堆中的内存就要被释放了。 在OC中,实例对象只能存储在堆中,像下面这种在栈中为对象分配内存,是不行的:someClass objec = [[someClass alloc] init] ; 马上就会有interface type cannot be statically allocated 的错误。
OC的引用计数机制分为手动引用计数(MRC)和自动引用技术(ARC),后者在2011年推出的,编译器在编译的时候自动的在代码中添加retain和release,前者需要开发者自己添加,相当麻烦,一不留神,内存泄漏。
OC中所有的类都是继承自NSObject,而且只能是单一继承,而不能像C++那样能多重继承,这相对少了一些灵活性,但是OC提供了协议(protocol)弥补了这一缺陷。最近发布的swift,号称面向协议的编程,更是把协议发挥到淋漓尽致(具体可以观看wwdc视频https://developer.apple.com/videos/play/wwdc2015-408/)面向接口编程,而不是面向实现编程,一直是我们追求的。
因为OC与C的关联,可以OC中,无缝使用C语法,OC还可以与C++组合成objective-c++,只需要把OC的.m文件改成.mm,编译器马上就可以识别为Objective-C++ source,所以可以在OC中使用C++的一些库,极大方便开发。另外OC还可以和新退出来的Swift语言混合编写。
说明:比较记忆相对来说更容易熟练记得牢固,理解了C语言相对来说OC也不太难,OC是C语言的扩展,向下兼容C语言。 源文件后缀名比较 1.C语言源文件 .h:头文件 .c:源文件 .o:目标文件 .out :可执行文件 2.OC语言源文件 .h:头文件 .m:源文件 .mm:OC++源文件 数据类型比较 C语言中的常用类型: OC中的常用类型
注意:OC中新增类型
关键字比较
注意: 1.OC兼容C语言,C语言的关键字都可以在OC中使用 2.如果使用OC中的关键字,部分关键字需要以"@"开头 补充一点:"@"的基本用法 1.表示将C的字符串转换OC中的字符串对象NSstring 2.OC中大部分关键字以@开头的
说明:比较记忆相对来说更容易熟练记得牢固,理解了C语言相对来说OC也不太难,OC是C语言的扩展,向下兼容C语言。 源文件后缀名比较 1.C语言源文件 .h:头文件 .c:源文件 .o:目标文件 .out :可执行文件 2.OC语言源文件 .h:头文件 .m:源文件 .mm:OC++源文件 数据类型比较 C语言中的常用类型: OC中的常用类型
注意:OC中新增类型
关键字比较
注意: 1.OC兼容C语言,C语言的关键字都可以在OC中使用 2.如果使用OC中的关键字,部分关键字需要以"@"开头 补充一点:"@"的基本用法 1.表示将C的字符串转换OC中的字符串对象NSstring 2.OC中大部分关键字以@开头的
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论