WEB开发网
开发学院手机开发iPhone 开发 iPhone 开发入门——从 C/C++ 语言到 Objective-C... 阅读

iPhone 开发入门——从 C/C++ 语言到 Objective-C 语言

 2010-02-22 06:15:00 来源:WEB开发网   
核心提示:这个定义看上去包括了我们上面说过的其他类型,也就是说,iPhone 开发入门——从 C/C++ 语言到 Objective-C 语言(6),Method(我们常说的方法)表示一种类型,这种类型与selector和实现(implementation)相关,查询方法的实现是否被缓存(上面类定义中的struct objc_c

这个定义看上去包括了我们上面说过的其他类型。也就是说,Method(我们常说的方法)表示一种类型,这种类型与selector和实现(implementation)相关。

最初的SEL是方法的名称method_name。char型的method_types表示方法的参数。最后的IMP就是实际的函数指针,指向函数的实现。

Class的定义

Class(类)被定义为一个指向struct objc_class的指针,在objc/objc-class.h中它是这么定义的:

struct objc_class {

struct objc_class *isa; /* metaclass */

struct objc_class *super_class; /* 父类 */

const char *name; /* 类名称 */

long version; /* 版本 */

long info; /* 类信息 */

long instance_size; /* 实例大小 */

struct objc_ivar_list *ivars; /* 实例参数链表 */

struct objc_method_list **methodLists; /* 方法链表 */

struct objc_cache *cache; /* 方法的缓存 */

struct objc_protocol_list *protocols; /* protocol链表 */

};

由以上的结构信息,我们可以像类似于C语言中结构体操作一样来使用成员。比如下面取得类的名称:

Class cls;

cls = [NSString class];

printf("class name %s ", ((struct objc_class*)cls)->name);

发送消息与函数调用的不同

Objective-C的消息传送如下图所示 :

Objective-C MessageSystem

Objective-C的消息传送

发送消息的过程,可以总结为以下内容 :

首先,指定调用的方法

为了方法调用,取得 selector

源代码被编译以后,方法被解释为 selector。这里的 selector 只是单纯的字符串。

消息发送给对象B

消息传送使用到了 objc_msgSend 运行时API。这个API只是将 selector 传递给目标对象B。

从 selector 取得实际的方法实现

首先,从对象B取得类的信息,查询方法的实现是否被缓存(上面类定义中的struct objc_cache *cache;)。如果没有被缓

存,则在方法链表中查询(上面类定义中的struct objc_method_list **methodLists;)。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:iPhone 开发 入门

编辑录入:coldstar [复制链接] [打 印]
赞助商链接