runtime原理

转载 2015年07月06日 22:21:16
最近,一直又一个东西困扰着我,runtime到底是什么东西?原理又是什么?查看了网上的一些blog,一般都是讲怎么去用的,或者动态添加一些方法或者调用之类的,那runtime底层到底是个什么东东呢?希望我这篇文章对读者有用……

对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道runtime底层编译成C++语言之后做了什么? 
查到一个大牛给资料,顿时对runtime有了一定认识!


我们随便写一个小程序,代码如下: 
person类头文件如下,

<!-- lang: cpp -->
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, strong) NSString *name; 
@property (nonatomic, assign) int age;

@end

main.m文件如下

<!-- lang: cpp -->
int main(int argc, const char * argv[])

{

Person *p = [[Person alloc] init];

NSString *str = @"zhangsan";

p.name = str;
// p.name 等价于
[p setName:str];

p.age = 20;

return 0;

}

然后我们打开终端,在命令行找到cd到文件目录,然后中输入:

clang -rewrite-objc main.m 

命令可以将main.m编译成C++的代码,改成不同的文件名,就会生成不同的c++代码 
这是就生成了main.cpp这个c++文件,打开文件代码 
查看该main.cpp最底下的main函数, 
这样我们就可以看到底层具体实现的方式!

这时,我们就需要知道这些方法: 
objc_msgSend 可以给对象发送消息 
objc_getClass(“Person”) 可以获取到指定名称的对象 
sel_registerName(“alloc”) 可以调用到对象的方法

通过查看,c++代码,我们得出结论: 
使用objc_msgSend函数,给objc_getClass函数实例化的对象发送sel_registerName获取到的方法 
这么一个消息 
代码是给人看的,顺带让机器实现功能。日常的程序开发过程中,要少用runtime,

那什么时候会使用runtime呢? 
runtime应用的时机: 
1> 当需要非常高的性能开发时,使用runtime,注释:oc的代码已经无法满足性能需求 
2> 当我们对系统内部的实现很好奇的时候,可以用clang反编译成c++去看底层的实现机制!

最后,我知道我写的这篇博客可能不是很好,或者读者觉得有什么不对的地方,希望能给我指出来,大家共同进步!


项目讲解的是runtime的底层实现原理, 如果想要知道runtime是怎么用的,可以查看runtime.h头文件查看! 
以下是runtime机制方法的一些使用方法介绍,希望对大家有用! 
相关技术文档:http://www.tuicool.com/articles/uimInm 
http://blog.csdn.net/lengshengren/article/details/17764135

iOS Runtime原理及使用

runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时。也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编...

结合 category 工作原理分析 OC2.0 中的 runtime

原文链接 绝大多数 iOS 开发者在学习 runtime 时都阅读过 runtime.h 文件中的这段代码: struct objc_class { Class isa OBJC_I...
  • khlljm
  • khlljm
  • 2016年08月03日 17:06
  • 146

iOS之runtime 原理与使用

runtime 原理与使用 方法调用 objc_msgSend 调用方法(函数)是语言经常使用的功能,在 Objective-C 中专业一点的叫法是 传递消息(pass a m...

iOS Runtime机制原理 寓情于景 情景交融

一  什么是runtime 对象调用方法的举例解释 1.我要找小P借本书,我通过指向小P位置的坐标找到她 ,他说书是她们部门统一的 财产,要找组织上借(类),小P(通过isa指针)告诉我书架(meth...

iOS开发 runtime实现原理以及实际开发中的应用

自己写了一个小例子:有一些相关知识点和博客文章 A: 首先现在控制器里面初始化一个对象,然后调用对象的方法: #import "ViewController.h" #import "Message...
  • hbblzjy
  • hbblzjy
  • 2016年07月21日 11:49
  • 878

OC Runtime(一)一些底层实现原理

runtime是一个由C语言和汇编编写的运行时库。runtime为OC提供 了面向对象的能力。他的作用体现在,加载类的信息、调度方法、方法的转发等。使得  OC面向对象编程成为可能。 Selecto...

KVC的理解、与runtime结合应用及其底层原理

一、KVC的概念理解及常用方法概念KVC(Key-Value Coding)顾名思义,就是键值编码的意思。 在iOS中,KVC就是通过使用属性的名称间接性来访问属性的方法,通俗一点的理解就是可以通过...

runtime实现原理

本文简单叙述了runtime的实现原理,供初学者一起学习!

加载桌面提示 C++Runtime Library

  • 2017年12月11日 16:59
  • 538KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:runtime原理
举报原因:
原因补充:

(最多只允许输入30个字)