OC-Runtime温故知新
每个java应用程序都有一个runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime 方法获取当前运行时,应用程序不能自己创建runtime类实例。Runtime 没有构造方法,说明不能创建对象。当这个类没有构造方法而且有非静态的方法,说明,这个类至少有一个静态方法,而且返回的是该类的对象。runtime就提供了一个静态的获取对象的方法,并且这个方法采用了单例模型的设计模式,保证了唯一性。
面试问答:
问:你用过单例吗?在哪里见过或者用过单例?
答:runtime就是一个单例的例子。
Runtime的最大优势:能拿到与内存数的数据。有的应用可以拿到虚拟机的内存。
- Runtime的简介
runtime就是运行时。OC是运行时机制,其中最主要的是消息机制。
对于C语言而言,在编译的时候,就会决定调用了哪个函数。也就是说,在编译的时候,C语言调用未实现的函数会报错。
对于OC来说,是属于动态调用过程,在编译的时候并不能决定调用哪个函数。只有真正运行的时候才根据函数名去获取该方法的函数。也就说,在编译的时候,OC可以调用任何方法,即使这个函数并未实现,只要声明了就可以。
- Runtime的交换方法
//这个方法只调用一次,就是分类加载的时候
+ (void)load {
// 交换方法的实现
}

- Runtime获取对象的属性
Iva 成员变量
Method 方法
Property 属性
Protocol 协议 思路:
1.创建NSObject的分类,添加一个获取对象属性的方法: + (NSArray *)getPropertyList;
2.用class_copyPropertyList这个方法获取类的所有属性,但是这个是C语言的,需要转化一下

- 用runtime添加属性值
假设创建了一个person类,需要在分类上添加一个属性height,步骤如下:
.添加一个person的分类 在分类的.h 上 添加一个属性
@interface Person (category) @property (nonatomic, copy) NSString *height; @end 在分类的.m 上 添加如下的代码 (需要导入头文件:#import <objc/message.h>) - (void)setHeight:(NSString *)height { //保存属性到系统的类
//产生关联,让某个对象(height)与当前对象的属性的height产生关联
//object:给哪个对象添加属性
//key:属性名
//value:属性值
//policy:策略
objc_setAssociatedObject(self, @"height", height, OBJC_ASSOCIATION_COPY_NONATOMIC);
} - (NSString *)height {
return objc_getAssociatedObject(self, @"height");
}
OC-Runtime温故知新的更多相关文章
- OC - runtime 之关联对象
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- OC Runtime
OC 是面向运行时的语言.Runtime就是系统在运行的时候的一些机制,其中最主要的是消息发送机制.OC语言与其他语言(如C语言)在函数(方法)的调用有很大的不同.C语言,函数的调用在编译的时候就已经 ...
- iOS - OC RunTime 运行时
1.运行时的使用 向分类中添加属性 // 包含运行时头文件 #import <objc/runtime.h> /* void objc_setAssociatedObject(id obj ...
- oc - runtime运行机制
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时做的事放到了运行时来处理.同时OC也是一门简单的语言,很大一部分是C的内容,只是在语言层面上加了关键字和语法,真正让OC强大 ...
- 18 (OC)* RunTime
目录: 一.怎么理解OC是动态语言,Runtime又是什么?二.理解消息机制的基本原理三.与Runtime交互的三种方式四.分析Runtime中的数据结构五.深入理解Rutime消息发送原理六.多继承 ...
- OC - runtime - 1
- OC 相关
1.OC runtime的理解[转载] http://www.csdn.net/article/2015-07-06/2825133-objective-c-runtime/1
- iOS RunTime运行时(1):类与对象
Objective-C语言是一门动态语言,他将很多静态语言在编译和链接期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一下 ...
- iOS运行时Runtime浅析
运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@select ...
- Objective-C的对象模型和runtime机制
内容列表 对象模型(结构定义,类对象.元类和实例对象的关系) 消息传递和转发机制 runtime系统功能理解 对象模型 结构定义 对象(Object): OC中基本构造单元 (building blo ...
随机推荐
- 3d点云
rgb-d:rgb加depth组成4channel的 3d点云
- CS193p Lecture 8 - Protocols, Blocks and Animation
一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...
- Fortran学习笔记4(循环语句)
Fortran学习笔记4 Fortran学习笔记4 逻辑运算 循环 Do语句 Do-While循环 循环控制 循环应用实例 逻辑运算 if命令需要和逻辑运算表达式搭配才能起到很好的效果.下面分别列出F ...
- 【Java_多线程并发编程】JUC原子类——4种原子类
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4种,分别是: 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: Atom ...
- web开发框架Flask学习一
flask框架 用Python做Web开发的三大框架特点 Django 主要特点是大而全,集成了很多的组件,例如:Admin Form Model等,不管你用不用的到,他都会为 你提供,通常用于大型W ...
- bash文件名统配
bash基础特性之globbing,即文件名通配: 文件名通配:使用元字符匹配字符 *:匹配任意长度的任意字符 假如文件名为paaaa,则pa*,*pa ...
- ES6(Module模块化)
模块化 ES6的模块化的基本规则或特点: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取. 一个模块就是一个单例,或者说就是一个对象: 2:每一个 ...
- BZOJ 4557: [JLoi2016]侦察守卫
题目大意:每个点有一个放置守卫的代价,同时每个点放置守卫能覆盖到的距离都为d,问覆盖所有给定点的代价是多少. 题解: 树形DP f[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上覆盖y层的最 ...
- 关于网络IP地址的分类
一.IP地址的分类 众所周知,IP地址都是以点号.分为4段来表示.不同类的IP前几位的表示含义也不尽相同. 1.A类IP [网络地址] 第一位表示网络地址,且第一个字节的第一位必须以0开头.依据此原则 ...
- maven 打某一个模块的包
mvn clean mvn clean install -pl benefit-microservice-gateway -am -Dmaven.test.skip=true