• 关于C、OC、C++、OC++、Swift的一些常识


    关于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语言混合编写。

    OC和C语言比较

    说明:比较记忆相对来说更容易熟练记得牢固,理解了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中大部分关键字以@开头的

  • 相关阅读:
    移动前端webApp开发点滴积累20140524
    做业务系统与公众产品的区别
    浅谈浏览器兼容性问题-(4)工具及调试
    浅谈浏览器兼容性问题-(3)他山之石整理
    浅谈浏览器兼容性问题-(2)本人解决方案理解与积累
    使用Using的注意事项
    [转]VMPlayer的Briged网络配置
    [转]移动互联网应用技术架构简介-Restful服务
    理解WCF中的Contracts
    [翻译]在ASP.NET Web API中通过OData支持查询和分页
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5492764.html
Copyright © 2020-2023  润新知