美文网首页
4,永远绕不开的runtime

4,永远绕不开的runtime

作者: ForstDragon | 来源:发表于2019-06-21 14:57 被阅读0次

1、为什么需要Runtime

  • Objective-C 是一门动态语言,它会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。
  • 因此,编译器是不够的,我们还需要一个运行时系统(Runtime system)来处理编译后的代码。
  • Runtime 基本是用 C 和汇编写的,由此可见苹果为了动态系统的高效而做出的努力。苹果和 GNU 各自维护一个开源的 Runtime 版本,这两个版本之间都在努力保持一致。

2、Runtime是什么

*Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如:
[receiver message];
底层运行时会被编译器转化为:
objc_msgSend(receiver, selector)
如果其还有参数比如:
[receiver message:(id)arg...];
底层运行时会被编译器转化为:
objc_msgSend(receiver, selector, arg1, arg2, ...)

3、具体应用的场景有哪些?

3.1利用关联对象给分类关联属性,

//添加关联对象
void objc_setAssociatedObject(id object, const void * key, id value, objc_AssociationPolicy policy)

//获取关联对象
id objc_getAssociatedObject(id object, const void * key)

//移除所有关联对象
void objc_removeAssociatedObjects(id object)
//实例
@interface NSObject (test)
@property (nonatomic, copy) NSString *name;
@end
.m文件
@implementation NSObject (test)
// 定义关联的key
static const char *key = "name";
-(NSString *)name
{
    // 根据关联的key,获取关联的值。
    
   return objc_getAssociatedObject(self, key);
    
}
-(void)setName:(NSString *)name
{
    // 第一个参数:给哪个对象添加关联
    // 第二个参数:关联的key,通过这个key获取
    // 第三个参数:关联的value
    // 第四个参数:关联的策略
    objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

3.2查看私有成员变量

self.textField.placeholder = @"请输入用户名"
[self.textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

3.3字典转模型,利用Runtime遍历所有的属性或者成员变量,然后利用KVC赋值

3.4 交换方法的实现

3.5 利用消息转发机制解决方法找不到崩溃的问题

相关文章

  • 4,永远绕不开的runtime

    1、为什么需要Runtime Objective-C 是一门动态语言,它会将一些工作放在代码运行时才处理而并非编译...

  • Runtime笔记

    Runtime是iOS开发中最绕不开的一个话题,它可以说就是iOS的根本,之前关于Runtime看过很多次,过一段...

  • 教育孩子永远绕不开“关系”

    孩子为什么会厌学?这是家长百思不得其解的问题。 大人们总是认为学生时代是孩子一生中最美好的时光,也许是自身抱着对学...

  • 西汉的北方是属于冒顿,卫青与霍去病

    (一)单于冒顿 大汉王朝的故事永远离不开卫青霍去病,卫青霍去病的故事永远绕不开匈奴,匈奴的故事永远少不了冒顿单于。...

  • 《攻壳》来了,让人惧怕的人工智能!

    人工智能,永远是科幻电影绕不开的话题!4月7日,又一部关于人工智能的电影《攻壳机动队》(Ghost in the ...

  • RunTime 一点一滴

    一直用oc这门语言编程,也一直在慢慢深入的了解这门语言。这就有一个始终绕不开的概念runtime。我想对于很...

  • 绕不开的坑

    希望从一开始就能够选择一个所谓正确的方向,然后朝之前行,仿佛选择正确就意味着前行之路的容易。其实所谓的选择比努力重...

  • 绕不开的相遇

    绕不开的相遇 表弟今年种的地瓜丰收了。他给我送地瓜时聊起了和地瓜的相遇。 小学时家里不知谁弄来的种子,只种了...

  • 绕不开的乡愁

    我在前面哭 母亲在后面哭 父亲提着行李默默走着 20年前的这幕总会在半夜里 把我折腾醒 几万文字的平凡世界刻的我生...

  • 绕不开的医院

    上上周去支气管炎去医院做雾化,今天又去医院看眼睛。医院永远人山人海,诊室里也塞满了看病看结果的大人小孩,我真的好想...

网友评论

      本文标题:4,永远绕不开的runtime

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