学习一门开发语言,首先要掌握的它的基本语法,这可能几天就能学会,但如果要融会贯通,就得去学习这门语言的框架和一些库,再结合一些项目的应用,这可能需要花几年的时间。
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. COGS 有标号的二分图计数系列

    其实这三道题都是不错的……(虽然感觉第三题略套路了……) 分别写一下做法好了…… COGS2392 有标号的二分图计数 I 这个就很简单了,Noip难度. 显然可以直接认为黑点和白点分别位于二分图两侧 ...

  2. 洛谷P1081 开车旅行(倍增)

    题意 题目链接 Sol 咕了一年的题解.. 并不算是很难,只是代码有点毒瘤 \(f[i][j]\)表示从\(i\)号节点出发走了\(2^j\)轮后总的距离 \(da[i][j]\)同理表示\(a\)的 ...

  3. nodejs项目windows下开机自启动

    Nodejs项目开机自启动 1. 在需要自启动的项目中安装 node-windows 模块 npm install node-windows --save 2. 在项目根目录创建nw.js文件 代码截 ...

  4. 项目经验:GIS<MapWinGIS>建模第三天

    记录下GIS工程进展

  5. hdu 2063 过山车(模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  6. SVNKit学习——使用低级别的API(ISVNEditor接口)直接操作Repository的目录和文件(五)

      本文是参考官方文档的实现,官方wiki:https://wiki.svnkit.com/Committing_To_A_Repository 本文核心使用的是ISVNEditor这个接口直接对Re ...

  7. mysql8采用caching-sha2-password加密

    因为搭建docker容器mysql,直接pull mysql latest版本,因为目前mysql的版本已经升级到了8.0. 像我们之前链接mysql的方式,或者说客户端,就不行了. 比如navica ...

  8. golang 安装 guru vscode 安装失败

    1.先从git上复制下来 git clone https://github.com/golang/tools 2.再$GOPATH/bin中安装 go install golang.org/x/too ...

  9. dedecms Ajax异步获取文章列表

    dedecms如何通过ajax(异步)动态获取文章列表数据. 第一步添加:服务端(PHP)代码 打开plus目录下面的list.php文件,在12行代码下面添加以下代码: if(isset($_GET ...

  10. hosts配置

    转自:http://www.cnblogs.com/ylemzhang/archive/2011/10/19/2217187.htm 注意: hosts文件不支持端口映射 如果指定端口参考:  //直 ...