学习一门开发语言,首先要掌握的它的基本语法,这可能几天就能学会,但如果要融会贯通,就得去学习这门语言的框架和一些库,再结合一些项目的应用,这可能需要花几年的时间。
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的一个对象,然后在当前栈里面分配两个指针的内存大小,用来存储两个指向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语言的更多相关文章

  1. swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者

    Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...

  2. OC语言前期准备

    OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...

  3. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  4. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  5. OC语言构造方法

    OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...

  6. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  7. OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  8. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

  9. OC语言-03-OC语言-三大特性

    一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...

随机推荐

  1. sql: TRIGGER

    --Common Table Expressions(CTE) WITH HighSample (SampleId,SampleTitle,SampleContent) AS ( SELECT Sam ...

  2. 排序算法lowb三人组-选择排序

    def get_min_pos(li): min_pos = 0 for i in range(1, len(li)): if li[i] < li[min_pos]: min_pos = i ...

  3. jquery not() 方法

    1.not(expression) 根据表达式参数的值,从包装集里删除元素 example : $('img[alt]').not('[alt*=joy]') 返回包含属性alt的img元素,但img ...

  4. 转 linux screen 命令详解

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  5. (MVVM) ListBox Binding 和 实时刷新

    当需要用Lisbbox 来log 一些记录的时候,ObservableCollection 并不可以是记录实时的反应在WPF 的UI上面. 这个时候就需要用一个异步collection 来完成. // ...

  6. SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串

    在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...

  7. 记一次使用MemoryCache不能Get的问题

    在.NET Core自带的Angular模板项目中,我想要做一个简单的登录认证. 所以想填写用户名密码,使用guid作为key,存储登录信息,每次页面刷新的时候check它. 思路觉得没有问题,但是一 ...

  8. 使用jQuery操作input的value值

    表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用jquery方法操作表单控件的方法: $(selector ...

  9. Access 64-bit HKLM\Software Registry by 32-bit C#.NET Application

    http://www.codeproject.com/Articles/1003177/Access-bit-HKLM-Software-Registry-by-bit-Csharp-NE While ...

  10. Python学习---重点模块之json

    注意:JSON不能转换类,不能转换函数 重点方法示例 json.dumps():实现文件写入,字符串转换[写入文件当然是JSON字符串楼] 实际上,json.dumps()只是帮我们做了一个字符串的转 ...