iPhone 开发入门——从 C/C++ 语言到 Objective-C 语言
2010-02-22 06:15:00 来源:WEB开发网这个定义看上去包括了我们上面说过的其他类型。也就是说,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的消息传送
发送消息的过程,可以总结为以下内容 :
首先,指定调用的方法
为了方法调用,取得 selector
源代码被编译以后,方法被解释为 selector。这里的 selector 只是单纯的字符串。
消息发送给对象B
消息传送使用到了 objc_msgSend 运行时API。这个API只是将 selector 传递给目标对象B。
从 selector 取得实际的方法实现
首先,从对象B取得类的信息,查询方法的实现是否被缓存(上面类定义中的struct objc_cache *cache;)。如果没有被缓
存,则在方法链表中查询(上面类定义中的struct objc_method_list **methodLists;)。
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››iphone图片拉伸的几种方法
- ››iphone正则表达式的简单使用
- ››iPhone开发Unresolved Symbols CAKeyframeAnimati...
- ››IPhone开发-“此证书是由未知颁发机构签名”解决方...
- ››IPhone开发-整合私钥和证书,生成.p12文件
- ››iPhone应用开发-UIPickerView选取器详解
- ››iphone 获取屏幕的宽度和高度
- ››iPhone读取工程包中的二进制文件
- ››iPhone新手机 不挂YouTube APP
更多精彩
赞助商链接