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有了更深入的了解呢?在这里,希望我们大家相互交流!有什么错误之处,还请指正
相关推荐
iOS运行时(Runtime)是Apple为其移动操作系统iOS和macOS提供的一种核心技术,它是一个底层的接口,使得开发者能够与Objective-C和Swift等编程语言的运行环境进行交互。在这个环境中,对象、类、方法以及消息传递等...
### Objective-C运行时编程指南 #### 导言 Objective-C是一种强大的面向对象编程语言,它在编译和链接阶段保留了大量的灵活性,将其推迟至运行时处理。这种特性使得Objective-C能够在运行时动态地加载类、解析方法...
iOS的消息转发机制是Objective-C(OC)语言中一个至关重要的特性,它允许对象在接收到无法响应的消息时有机会处理或转发这些消息。这一机制对于理解OC的动态性以及解决一些特定问题,如方法的动态绑定、类的扩展等,...
在iOS开发中,Objective-C的运行时(Runtime)系统是一个强大的特性,它使得Objective-C具有了动态性。本文将深入探讨“ios runtime消息转发机制”,理解这个机制对于优化代码、解决潜在问题以及实现高级功能至关...
Objective-C 2.0运行时系统编程指南。介绍从底层介绍iOS运行时机制。
**沙盒机制**是iOS操作系统中的一项重要安全特性,它确保每个应用程序都运行在一个独立且受限的环境中,以此来保护用户数据的安全和隐私。简单来说,沙盒机制为每一个iOS应用程序创建了一个隔离的“沙盒”,应用程序...
理解并掌握iOS后台运行机制是开发高质量iOS应用的关键。合理运用不同的后台模式和任务,可以提升用户体验,同时注意优化性能和遵守审核规则,才能确保应用能在App Store顺利上线并提供优质服务。通过不断学习和实践...
在数据安全性方面,iOS系统具有强大的防护机制,保护用户隐私不被侵犯,这在当前个人信息安全问题日益突出的时代尤为重要。 App Store作为iOS应用的主要来源,拥有数十万款应用,涵盖了生活、工作、娱乐等各个领域...
iOS的消息转发机制是Objective-C运行时系统中一个关键特性,它允许对象在接收到未实现的方法调用时,有机会去处理或转发这个消息,从而防止程序因无法识别选择子(selector)而崩溃。这一机制主要包含三个步骤: 1....
在iOS平台上,应用程序在后台运行的能力受到严格的限制,这是为了优化电池寿命和系统性能。iOS采用了墓碑式后台管理模式,大部分应用在用户按下Home键后只能在后台运行有限的时间。通常,应用程序在转入后台后有180...
在iOS开发中,通知机制(Notification)是一种非常重要的组件,用于在应用程序的不同组件之间传递信息。这个机制允许对象发送消息给其他对象,而无需知道接收者的具体身份,从而实现了松耦合的设计。本文将深入探讨...
总之,"ios 程序在后台运行的demo"可能展示了如何利用iOS提供的各种机制,使得应用能在后台保持运行或者在后台执行特定任务。理解和掌握这些技巧对于开发高效、用户体验良好的iOS应用至关重要。
在Delphi开发iOS应用时,我们可以利用`Background Fetch`这一机制来实现后台运行。本示例"BackgroundFetchDemo"就是展示了如何在Delphi中启用并处理iOS的后台刷新事件。 首先,我们需要理解什么是`Background Fetch...
总之,iOS中的对象消息转发机制是Objective-C运行时的重要特性,它提供了处理未知消息的手段,使得我们的代码更加灵活和健壮。理解并掌握这一机制,可以帮助我们编写出更加高效、稳定且易于维护的iOS应用。
为了更好地理解iOS应用后台运行机制及其应用场景,本报告对iOS官方文档中关于后台运行的相关规定进行了深入研究,并结合实际案例进行分析。 #### 二、iOS后台运行概述 iOS系统的后台运行机制是为了提高用户体验而...
标题"解决ios下后台运行与锁屏时倒计时停止问题"正是针对这一常见挑战,而描述中的内容则提供了解决方案的方向。 当iOS应用被切换到后台,Apple的沙盒机制会自动暂停大部分非必要进程,包括Web视图(如WKWebView)...
4. **稳定性与无限运行**:实现应用稳定无限后台运行的关键在于合理利用iOS提供的后台机制,并确保代码优化,避免无用的资源消耗。描述中提到自测超过4天,说明开发者可能已经实现了有效的电池管理和后台运行策略。 ...
在iOS应用开发中,图片下载机制是一个至关重要的环节,因为它直接影响到用户体验和应用程序的性能。在资源有限的移动设备上,高效地管理和下载图片对于节省内存、提高运行速度以及优化电池寿命都至关重要。本示例...
在iOS开发中,消息转发机制是Objective-C运行时(Runtime)系统的一个重要特性,它使得对象在接收到无法响应的消息时,有机会进行处理,而不是直接抛出“未定义选择子”(Undefined selector)的错误。这个机制提高...
开发者必须遵循沙盒机制,合理地组织和管理应用的数据,确保应用能在iOS系统中安全、高效地运行。随着iOS平台的不断更新和升级,沙盒机制也在不断地完善和发展,开发者需要持续学习和适应新的变化。