5.

1.编译器?
1.编译器:预处理,把宏替换,删除注释,产生.i文件。
2.编译:把i转换成汇编语言,产生.s文件。
3.汇编 把汇编语言转换成机器码,产生.o文件。
4.链接。
编译时:
编译时:就是正在编译的时候.其实编译时就是简单的作一些翻译工作,
编译: 就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.另外还有啥链接器.汇编器.为了便于理解我们可以统称为编译器)
运行时:
运行时就是代码跑起来了.被装载到内存中去了.(你的代码保存在磁盘上没装入内存之前是个死家伙.只有跑到内存中才变成活的).而运行时类型检查就与前面讲的编译时类型检查(或者静态类型检查)不一样.不是简单的扫描代码.而是在内存中做些操作,做些判断.

编译好的app,汇编对应的地址,都是不变。所以查找崩溃日志的时候,可以根据dsym根据崩溃地址找到详细文件崩溃原因。

2.运行时做了什么?
我想在扩展(category)中添加一个属性,如果iOS是不允许给扩展类扩展属性的,那怎么办呢?答案就是使用运行时机制

1.OC 三种层面上与runtime系统进行交互。
1.object-c源代码:
只需要编写OC代码,runtime系统自动再幕后搞定一切,调用方法,编译器会将OC代码转换成运行时代码,在运行时确定数据结构和函数。
2.Foundation 框架NSObject类定义的方法。
class方法返回对象的类,iskindClass,isMemeberOfClass respondsToSelector conformsToProtocol methodForSelector.
3.通过对runtime库函数的直接调用。
runtime runtime.h头文件即可。
runtime相关术语:
1.SEL 方法选择器,编译器命令 @selector. 或者sel_registerName 根据SEL就可以找到对应的方法地址,方法的名字来识别方法。

  1. objc_object. 实例对象 id——里面的isa 指针指向 objc_class类对象。
    objc_class 类对象 里面有父类。类名,成员变量,方法,缓存,以及协议。isa 指向元类。类对象所属的类是元类,
    Meta_class 元类 所有元类的isa都指向根元类。
    objc_class 本身也是一个对象,类对象所属的类叫做元类。
    3.MEthod objc_method 存储方法名,类型和方法实现。 SEL 方法名类型 IMP方法实现 函数指针。通过一组id 和SEL参数就能确定唯一的方法实现地址。
    4.cache:每次一个方法被调用,优先会在cache中查找。
    :用数组表示的hash表.
    5.property:
    class_copyPropertyLIst. protocol_copyPropertyList
    objc_property_t指针 property_getname property_getAttributes(properties[i])
    6.runtime与消息的关系。
    objc_msgSendSuper objc_msgSendSuper_stret 如果消息是传递给父类,那么会调用名字带有的Super. 如果是数据结构,而不是简单值的时候,会调用名字带有stret函数
    Self:是在运行时的时候被动态传入的,
    objc_msgsend, 它将直接调用该方法实现,

接受消息的对象:self 所指向的内容,当前方法的对象指针。
方法选择器:CMD 指向的内容,当前方法的SEL指针。

@dynamic propertyName;
resolveinstanceMethod ,resolveClassMethod.方法添加实例方法实现,和类方法实现。
Class_addmethod函数完成向指定类添加特定方法实现。

1.消息转发,重定向:
forwardingTargetForSelector 返回nil forwardInvacation:消息转发机制
2.会出发消息转发机制。
methodSignatureForselector:
3.交换系统方法:
OC load方法里面写黑魔法
method_exchange. Implementations
4.category支持属性。
objc_getassociatedObject(self,key);
5,performselector with object. After delay: 创建一个定时器,时间结束后系统会使用runtime通过方法名称,去方法列表中找到对应的方法。

你可能感兴趣的:(5.)