美文网首页
runtime 基础(一)

runtime 基础(一)

作者: 我是C | 来源:发表于2017-02-03 11:48 被阅读40次

runtime是什么?

oc是动态语言,oc代码在运行时会转换成c语言代码。

你会问有什么用?
做业务来说用处不大。开发sdk,热修复等等用处大大的。

那为什么要了解runtime?
了解runtime你会对oc的运行机制理解更深刻,本身学程序就是学一种思想。
将实际问题以编程的思维来解决,也就是智能。

oc对象

每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是Objective-C对象的第一个成员变量,它就是isa指针。

看看oc对象的定义

@interface NSObject <NSObject> {
    Class isa  OBJC_ISA_AVAILABILITY;
}
//一个isa指针

看看Class

typedef struct objc_class *Class;//结构体
//结构体展开,注意下面的英文
struct objc_class {
//指向类对象的指针,类对象也是一个这样的结构体
    Class isa  OBJC_ISA_AVAILABILITY;

#if !__OBJC2__
    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;                     
#endif

} OBJC2_UNAVAILABLE;
/* Use `Class` instead of `struct objc_class *` */

oc有几种对象

一种是实例对象
一种是类对象

举例:
现在我有两个类,ClassA是父类,ClassB类是子类.
ClassA 两个方法: - methodA | +methodA
ClassB 两个方法: - methodB | +methodB
实例
a = [ClassA new];
b = [ClassB new];

实例调用

[b  methodB]  
---b指向ClassB->isa,isa去结构体遍历methodLists找到methodB方法;

[b methodA]
---因为ClassB 没有对应的方法,然后通过isa的super_class去遍历父类的methodLists,找到了methodA.

类调用

[ClassB  methodB]  
---ClassB的isa,isa中还有一个Class isa参数,这个isa指向的是一个类对象

[ClassB methodA]
---因为ClassB 没有对应的方法,然后通过isa的super_class去遍历父类的methodLists,找到了methodA.

盗图


434405-20151227181339499-1243485875.png

如果我写的有问题,请告诉我,我会积极改正!

相关文章

  • Runtime-基础与应用

    主要内容 Runtime 基础 Runtime 应用 Runtime 基础 Objective-C 语言将决定尽可...

  • Runtime图形总结

    RunTime基础 基础路径图: RunTime进阶 进阶路径图: 消息机制: objc_msgSend objc...

  • Objective-C Runtime的消息机制以及消息转发机制

    OC Runtime OC Runtime 是一个 Runtime 库,主要以 C 和汇编语言为基础,使用面向对象...

  • runtime 基础(一)

    runtime是什么? oc对象 看看oc对象的定义 看看Class oc有几种对象 举例:现在我有两个类,Cla...

  • Objective-C Runtime浅析

    前言 Runtime是什么 Runtime的实现原理消息传递机制Runtime基础数据结构NSObject & i...

  • GolangRuntime学习

    Runtime 简介和发展 Runtime 简介 Golang Runtime 是go语言运行所需要的基础设施 协...

  • iOS Runtime 机制

    runtime 基础介绍 Runtime 中 objc_class , objc_object, objc_cat...

  • iOS面试点文章链接

    runtime基础方法、用法、消息转发、super: runtime 完整总结 runloop源码、runloop...

  • runtime

    runtime官方runtime中文 一、iOS 开发基础知ivars(实例变量)与@property(属性) O...

  • Runtime常用的几个应用场景

    概述 接上篇《Runtime基本原理及Demo》,了解了Runtime相关基础知识后,我们谈一下Runtime常见...

网友评论

      本文标题:runtime 基础(一)

      本文链接:https://www.haomeiwen.com/subject/rschvttx.html