http://my.oschina.net/panyong/blog/298631
转载的。
我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助!
首先,第一个问题,
1》runtime实现的机制是什么,怎么用,一般用于干嘛?
这个问题我就不跟大家绕弯子了,直接告诉大家,
runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。
在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者
比如说,下面一个创建对象的方法中,
举例:
OC :
[[MJPerson alloc] init]
runtime :
objc_msgSend(objc_msgSend(“MJPerson” , “alloc”), “init”)
第二个问题
runtime 用来干什么呢??用在那些地方呢?怎么用呢?
runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)
-
在程序运行过程中, 动态创建一个类(比如KVO的底层实现)
-
在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法
-
遍历一个类的所有成员变量(属性)\所有方法
例如:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了runtime就可以动态设置!
例如,PYPerson.h的文件如下所示import
@interface PYPerson : NSObject
@property (nonatomic, assign) int age;
@property (nonatomic, assign) int height;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) int age2;
@property (nonatomic, assign) int height2;
@property (nonatomic, assign) int age3;
@property (nonatomic, assign) int height3;
@property (nonatomic, assign) int age4;
@property (nonatomic, assign) int height4;
而PYPerson.m实现文件的内容如下
<!-- lang: cpp -->
#import "PYPerson.h"
import
@implementation PYPerson
-
(void)encodeWithCoder:(NSCoder )encoder
{
unsigned int count = 0;
Ivar ivars = class_copyIvarList([PYPerson class], &count);for (int i = 0; i<count; i++) {
// 取出i位置对应的成员变量 Ivar ivar = ivars[i]; // 查看成员变量 const char *name = ivar_getName(ivar); // 归档 NSString *key = [NSString stringWithUTF8String:name]; id value = [self valueForKey:key]; [encoder encodeObject:value forKey:key];
}
free(ivars);
} -
(id)initWithCoder:(NSCoder *)decoder
{
if (self = [super init]) {unsigned int count = 0; Ivar *ivars = class_copyIvarList([PYPerson class], &count); for (int i = 0; i<count; i++) { // 取出i位置对应的成员变量 Ivar ivar = ivars[i]; // 查看成员变量 const char *name = ivar_getName(ivar); // 归档 NSString *key = [NSString stringWithUTF8String:name]; id value = [decoder decodeObjectForKey:key]; // 设置到成员变量身上 [self setValue:value forKey:key]; } free(ivars);
}
return self;
}
这样我们可以看到归档和解档的案例其实是runtime写下的
学习,runtime机制首先要了解下面几个问题
1相关的头文件和函数
1> 头文件
-
利用头文件,我们可以查看到runtime中的各个方法!
2> 相关应用
- NSCoding(归档和解档, 利用runtime遍历模型对象的所有属性)
- 字典 –> 模型 (利用runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)
- KVO(利用runtime动态产生一个类)
- 用于封装框架(想怎么改就怎么改)
这就是我们runtime机制的只要运用方向
3> 相关函数
- objc_msgSend : 给对象发送消息
- class_copyMethodList : 遍历某个类所有的方法
- class_copyIvarList : 遍历某个类所有的成员变量
- class_…..
这是我们学习runtime必须知道的函数!
4.必备常识
1> Ivar : 成员变量
2> Method : 成员方法
从上面例子中我们看到我们定义的成员变量,如果要是动态创建方法,可以使用Method,
也许,看到这里,你是否对runtime有了更深入的了解呢?在这里,希望我们大家相互交流!有什么错误之处,还请指正
相关推荐
Objective-C 2.0运行时系统编程指南。介绍从底层介绍iOS运行时机制。
objective-c运行时编程指南,
适用于NativeScript的iOS运行时 包含NativeScript的iOS运行时的源代码。 是一个框架,使开发人员可以使用JavaScript和CSS为Android和iOS编写真正的本机移动应用程序。 每个移动平台都有其自己的生态系统,并提供完全...
沙盒解析初步,初步了解沙盒的运作过程,为以后的IOS学系,做基础铺垫
在iOS出来之前,主流的操作系统(MacOS/Windows)软件随便从哪里下载都能运行,系统安全存在隐患,盗版软件、病毒入侵、静默安装等等,苹果希望解决类似的问题,保证在iPhone iOS上的APP都是经过苹果官方允许的,...
同时又具有IOS的AutoLayout的功能,和部分SIZECLASS功能,以及IOS9中的UIStackView的功能,参考了masonry的一些语法机制,但是他却可以运行在IOS5版本的应用中。使用简单方便,代码清晰,而且少。 并且附带四篇教程...
iOS 设备内存有限,当设备内存不足时,系统会向运行中的应用发送一条内存过低警告通知。应用收到该通知后,应该立刻释放当前不需要使用的资源以及后期可以重新创建的对象。视图控制器在收到该通知的同时还会收到 ...
【APP应用分发系统】首发IOS分发系统 带超级签名功能与增加防封机制 现在企业签名掉的厉害,价格从200一月涨到了800以上。 所谓超级签名说白了就是个人证书签名。一个证书可以添加100个苹果手机udid,这样每台APP的...
使用运行时机制可以对任意一个NSObject对象及其子类 在任何类中添加 dealloc监测 在开发过程中可以检测循环引用等内存泄漏问题 方便自测 提高代码健壮性
【APP应用分发系统】首发IOS 分发系统 带超级签名功能与增加防封机制 现在企业签名掉的厉害,价格从 200 一月涨到了 800 以上。 所谓超级签名说白了就是个人证书签名。一个证书可以添加 100 个苹果手机 udid,这样...
iOS Runtime 开发中文文档,属于一种运行时机制,runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API,可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。...
包含nativescript的android运行时的源代码。nativescript是一个框架,它使开发人员能够使用javascript和css为android和ios编写真正的本地移动应用程序。每个移动平台都有自己的生态系统,并提供完全不同的开发工具和...
iOS 为了让设备尽量省电,减少不必要的开销,保持系统流畅,因而对后台机制采用墓碑式的“假后台”。除了系统官方极少数程序可以真后台,一般开发者开发出来的应用程序后台受到以下限制: 1.用户按Home之后,App转入...
iOS开发推送机制的时候,需要一个服务器向苹果APNS服务器发请求,配合iOS程序员测试,这个工程就是服务器端的,直接下载下来,放到eclipse里面运行。当然,你需要替换里面的deviceToken, 密码,还有你的APNS证书。...
使用nib和故事板技术创建HelloWorld,通过HelloWorld我们讨论了iOS工程模板、应用的运行机制和生命周期、视图器的生命周期。最后介绍API帮助文档和官方案例的使用。 第3章“iOS常用设计模式”。 iOS开发中常用的4种...
简介: Book Description Get a rapid introduction to iPhone, iPad, and iPod touch programming....第27章 多媒体播放与后台运行 第28章 Bonjour与Web服务端 第29章 推送通知与网络编程 第30章 后记 索引
在iOS出来之前,在主流操作系统(Mac/Windows/Linux)上开发和运行软件是不需要签名的,软件随便从哪里下载都能运行,导致平台对第三方软件难以控制,盗版流行。苹果希望解决这样的问题,在iOS平台对第三方App有绝对...