b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

面向对象开发过程 iOS开发:Runtime解析(4)

电脑杂谈  发布时间:2018-02-20 21:52:40  来源:网络整理

struct objc_ivar {

char *ivar_name OBJC2_UNAVAILABLE;

char *ivar_type OBJC2_UNAVAILABLE;

int ivar_offset OBJC2_UNAVAILABLE;

#ifdef __LP64__

int space OBJC2_UNAVAILABLE;

#endif

面向对象开发过程_面向对象开发步骤_面向对象方法的要点

}

其中 ivar_offset 是基地址偏移字节

5.IMP

IMP在objc.h中的定义是:

typedef id (*IMP)(id, SEL, ...);

它就是一个函数指针,这是由编译器生成的。面向对象开发过程当你发起一个OC消息之后,最终它会执行的那段代码,就是由这个函数指针指定的。而 IMP这个函数指针就指向了这个方法的实现。

如果得到了执行某个实例某个方法的入口,我们就可以绕开消息传递阶段,直接执行方法。

你会发现IMP指向的方法与objc_msgSend函数类型相同,参数都包含id和SEL类型。每个方法名都对应一个SEL类型的方法选择器,而每个实例对象中的SEL对应的方法实现肯定是唯一的,通过一组id和SEL参数就能确定唯一的方法实现地址。而一个确定的方法也只有唯一的一组id和SEL参数。

6.Cache

Cache 定义如下:

typedef struct objc_cache *Cache

struct objc_cache {

unsigned int mask /* total = mask 1 */ OBJC2_UNAVAILABLE;

unsigned int occupied OBJC2_UNAVAILABLE;

Method buckets[1] OBJC2_UNAVAILABLE;

};

Cache为方法调用的性能进行优化,每当实例对象接收到一个消息时,它不会直接在 isa 指针指向的类的方法列表中遍历查找能够响应的方法,因为每次都要查找效率太低了,而是优先在 Cache中查找。

Runtime 系统会把被调用的方法存到 Cache中,如果一个方法被调用,那么它有可能今后还会被调用,下次查找的时候就会效率更高。就像计算机组成原理中 CPU绕过主存先访问 Cache 一样。

7.Property

typedef struct objc_property *Property;

typedef struct objc_property *objc_property_t;//这个更常用

可以通过class_copyPropertyList 和 protocol_copyPropertyList 方法获取类和协议中的属性:

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)

注意:

返回的是属性列表,列表中每个元素都是一个 objc_property_t 指针

#import <Foundation/Foundation.h>


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-86234-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 杨芯蕾
      杨芯蕾

      一个连海洋法公约都没签署的国家却天天叫嚷遵守国际法

    • 神乐莹
      神乐莹

      送检和抽检完全是两个概念

    • 宁一凡
      宁一凡

    热点图片
    拼命载入中...