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;)。
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››iPhone应用帮助残障儿童看图说话
- ››iPhone实用工具AppBox Pro使用教程大揭秘
- ››iphone4省电方法
- ››iphone 获取地址的详细信息
- ››iPhone 库的基本内存管理策略
- ››iPhone加密文字亲手做 私密信息有保障
- ››iphone 根据经纬度坐标取详细地址(包括国,省,市...
- ››iphone/ipad ios cocoa object-c 近期苹果UI部分小...
- ››iphone中如何进行多线程编程
- ››iPhone OS SDK的这些事[安装、下载、版本、实例、...
- ››iPhone ObjectC的NSAutoreleasePool
更多精彩
赞助商链接