Objective-C之成魔之路【14-基本的C语言特性】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源码下载:点我传送

这里介绍一些特性,在编写Objective-C程序时不一定需要了解。

事实上,这些大部分来源于相关联的基本的C语言特性,

虽然C语言是一门过程式语言,其中的一些特性与面向对象编程的思想是对立的,

但是语言是思想也是工具,在其中找到二者关联和差异,会对Objective-C有更深入的理解。

数组:

定义一组有序的数据项,即数组。

如果在字符数组结尾添加一个终止空字符(‘\0’),就产生了一个通常称为字符串的变量。

和其他变量类型一样,必须在使用之前先声明数组,

数组的声明涉及声明数组所包含元素的数值类型,以及将存储在数组中的最大元素数目。

函数:

如果使用了自动引用计数(ARC),那么每次调用函数(方法)时,局部对象的变量都会默认初始化为空。

在函数中(和在方法中一样)定义的变量称为自动局部变量。

因为每次调用该函数后,它们都自动“创建”,并且它们的值对于函数来说是局部的。

函数和方法:函数是指非对象的过程调用,方法是指对象的过程调用。

函数默认的返回类型与方法默认的不同。

如果没有为方法指定返回类型,编译器就会假设它返回id类型的值。

同样,应该为方法声明返回类型,不要依赖这个事实。

函数的默认返回值是整型值。

调用函数或方法时,作为参数传递的值将被复制到相应的形参中。

使用数组时,并非将整个数组的内容复制到形参数组中,

而是传递一个指针,它表示数组所在的计算机内存地址。

所以,对形参数组所作的所有更改实际上都是对原始数组而不是数组的副本执行的。

因此,函数或方法返回时,这些变化仍然有效。

块Blocks:

块对于c语言是一种扩展。

它并没有作为标准ANSI C所定义的部分,而是APPLE公司添加到语言中的。块

看起来更像是函数。

一般来说,块是不能改变外部的变量的,除非使用_ _block int num = 0;这样修饰的变量。

块的其中一个优势在于能够让系统分配给其它处理器或应用的其它线程执行。

简言之:线程安全的。

不建议使用,不是标准的东西,当对程序进行移植时,就会显现出很不方便。

指针:

C语言里的重要特性,面试必考,工作必用。

指针可以高效地表示复杂的数据结构,更改作为参数传递给函数和方法的值,

并且能更准确、高效的处理数组。

字符串常量:

“This is char.” 这个是C样式的字符串。它们不是对象。

@“This is char.”这个是面向对象的字符串对象。

while循环用到了空字符等于数值0这一事实,熟练的Objective-C编程人员经常这样使用。

char *from;

char *to;

while (*from)

*to++ = *from++;

*to = ‘\0‘;

函数指针:

1)常见应用之一是作为参数传递给其它函数。

2)常见应用之一是建立分派表。即函数列表。

上面这些C语言特性,要记住一个基本原则:它们都不是对象。

这意味着不能给它们传递消息,也不能利用它们获得Foundation框架提供的内存分配策略之类的最大优势。

其他语言特性:

符合字面量:

(struct data) {.month = 7, .day = 2, .year = 2011}

goto语句:

懒惰的程序员才会经常滥用goto语句,goto语句的执行导致在程序中产生一个到达特定点的直接分支。

如果你不懒惰,建议你还是不要经常使用该语句。

空语句:

不做任何操作。

逗号运算符:

优先级列表里最底层的运算符,

在Objective-C语言中,所有的运算符都产生一个值,

所以逗号运算符的值是最右边的表达式值。

sizeof运算符:

Objective-C语言提供了sizeof运算符,

它可以用来确定数据类型或对象的大小,返回的是指定项的字节大小。

工作原理:

关于Objective-C语言和C语言联系的4个事实。

1)实例变量存储在结构中。

定义一个类和它的实例变量时,这些实例变量实际上存储在一个结构中。

这说明了如何处理对象,对象实际上是结构,结构中的成员是实例变量。

所以继承的实例变量加上你在类中添加的变量就组成了一个结构。

使用alloc分配新对象时,系统预留了足够的空间来存储这些结构。

结构中继承的成员(从根对象中获得的)之一是名为isa的保护成员,它确定对象所属的类。

2)对象变量实际上是指针。

来创建新的实例时,是在为对象的新实例分配存储空间(即存放结构的空间),然后使用结构的指针,并将指针变量存储在其中。

3)方法是函数,而消息表达式是函数调用。

方法实际上是函数。调用方法时,是在调用与接收者类相关的函数。

传递给函数的参数接收者(self)和方法的参数。

Objective-C编译器通过类名称和方法名称的组合为每个函数产生一个唯一的名称。

4)id类型是通用指针类型。

返回id类型值的方法只是返回指向内存中某对象的指针。

在C语言中就是 void *。

看了这4个事实后,你就会发现,其实,这些事实只是透露出Objective-C的面向对象底层是如何实现的。

基本上所有的面向对象都是使用面向过程的一个扩展来实现的,C++也是这样的。

也就是说,对象这个东西的底层实现都是由过程完成的。

简而言之:

对象都是结构struct和指针的组合而已。

看到很多面向对象的语言编译时都是转换为C语言的结构和指针,使用C语言编译。

说明面向对象的底层实现都是差不多的。

所以,从技术实现上来讲,没有特别大的变革。

但是从概念或思想上来说,这是巨大的。

另外,那些像perl,python等等这些解释执行的语言,最后的实现也是C语言来完成的。

语言是工具,但同样蕴涵着一种哲理,或是一种思想的表达。

语法或细节什么的忘记了可以再查看,理解了思想,你才能说对这门语言有所了解。

时间: 2024-10-03 21:53:30

Objective-C之成魔之路【14-基本的C语言特性】的相关文章

Objective-C之成魔之路【1-序章】

重开发者的劳动成果,请勿转载 C语言首创于AT&T实验室, UNIX OS的发展促进了C语言的快速普及,UNIX OS几乎完全是由C语言编写的. Brad J.Cox在20世纪80年代早期设计了Objective-C语言,它以一种叫做SmallTalk-80的语言为基础. SmallTalk-80可以参考: http://zh.wikipedia.org/wiki/Smalltalk Objective-C在C语言的基础上加了一层,这意味着对C进行了扩展, 从而创造出一门新的程序设计语言,支持面

Objective-C之成魔之路【15-Foundation框架】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 概述 Mac OS X开发会使用 Cocoa框架, 它是一种支持应用程序提供丰富用户体验的框架, 它实际上由: Foundation和Application Kit(AppKit)和 Core Data框架组成. iOS开发, 会使用 Cocoa Touch框架, 它实际上由: Foundation.Core

Objective-C之成魔之路【11-多态性、动态类型和动态绑定】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 多态这个其它语言也有.动态类型有类似的,但不完全相同. 动态绑定别的语言也有类似,但没有objective-c用的这么多. 多态能够使来自不同类的对象定义相同名称的方法. 动态类型能使程序直到执行时才确定对象所属的类. 动态绑定则能使程序直到执行时才确定实际要调用的对象方法. 多态性是指在父类中定义的成员变量和

Objective-C之成魔之路【3-数据类型】

重开发者的劳动成果,请勿转载 数据类型. 运算符和表达式在任何的计算机语言中都比较重要的, 在面向对象的Objective-C语言中, 除了常规的基本类型, 还有对象类型等. 运算符和表达式完全遵守C语言规范. Objective-C数据类型可以分为:基本数据类型. 对象类型和id类型. 基本数据类型有: int. float. double和char类型. 对象类型就是类或协议所声明的指针类型, 例如: NSAutoreleasePool * pool, 其中NSAutoreleasePool

Objective-C之成魔之路【5-选择结构】

重开发者的劳动成果,请勿转载 Objective-C中的控制语句有以下几类: ? 分支语句: if-else, switch ? 循环语句: while, do-while, for ? 与程序转移有关的跳转语句: break, continue, goto 对于任何程序语言来说,有能力进行判断是一项基本特性. if-else语句 分支语句提供了一种控制机制, 使得程序的执行可以跳过某些语句不执行, 而转去执行特定的语句. 1. 条件语句 if-else 2. 多分支语句 switch 条件语句

Objective-C之成魔之路【17-内存管理】

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 内存管理关心的是清理(回收)不用的内存,以便内存能够再次利用. 提供给Objective-C程序员的基本内存管理模型有以下三种: 1)自动垃圾收集.(iOS运行环境并不支持垃圾收集,在这个平台开发程序时没有这方面的选项,只能用在Mac OS X 程序上开发.这个机制挺恶心的,用mac电脑的人知道,当内存不足的时

Objective-C之成魔之路【16-使用文件】

郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 语言的设计主要是被应用于实践, 而Objective-C应用最广的地方就是Mac OS X或iOS的Foundation框架. Foundation框架同意你利用文件系统对文件或文件夹运行基本操作,这些基本操作是由NSFileManager类提供的. 使用NSFileHandle类提供的方法,能够打开文件并对

Objective-C之成魔之路【10-继承性】

重开发者的劳动成果,请勿转载 继承性是面向对象的重要概念之一, 子类能够继承父类的某些方法和成员变量. 作用域限定符为private的成员变量是不可以被继承的. 子类还可以重写父类的方法. 当然,这一切要从根类开始: 没有父类的类,位于类层次结构的最顶层,称为根(Root)类. NSObject是层次结构的最顶端(也就是它上面没有任何类),因此称为根类. 如果使用术语,可以将类称为子类和父类.同样,也可以将类称为子类和超类. 需要注意的是,要在子类中直接使用实例变量,必须先在接口部分声明. 在实

Objective-C之成魔之路【1-Objective-C特点】

重开发者的劳动成果,请勿转载 Objective-C与其它面向对象有这明显的不同, 它有这自己鲜 明的特色, 下面我们从这个方法介绍它的特点: 兼容性. 字 符串. 类. 方法. 属性. 协议和分类. 1.兼容性 Objective-C可以说是一种面向对象的C语言, 在Objective-C的代码中可以有C和C++语句, 它可以调用 C的函数, 也可以通过C++对象访问方法. 2.字符串 Objective-C通常不使用C语言风格的字符串. 大多数情况下是使用Foundation框架的NSStr

Objective-C之成魔之路【8-訪问成员变量和属性】

郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 訪问成员变量 从面向对象的封装角度考虑问题, 要想訪问类中的成员变量, 是要通过方法訪问的, 成员变量前面要有作用域限定符(protected, public, private) , 这些存取权限修饰符我们将在后面介绍. 成员变量的訪问, 是通过读取方法(getter) 和设定方法(setter). 訪问成员