runtime

作者: 那是什么 | 来源:发表于2017-06-15 19:10 被阅读5次

runtime官方
runtime中文

RunTime学习流程图
谈Runtime机制和使用的整体化梳理

一、iOS 开发基础知ivars(实例变量)与@property(属性)

Objective-C带来了一个重大改进就是Non-fragile ivar。使得i一个类可以随意增加实例变量,不必对子类重新编译。对框架开发者(如苹果)有重大意义。

最新的编译器支持@property可以自动synthesize实例变量。等于ivar+getter+setter方法。

属性修饰关键字

  • atomic。LLVM 4新增加的特性。是指存取器方法是thread-safe。并不保证整个变量是thread-safe的。如 NSMutableArray *stuff。self.stuff和self.stuff = otherStuff 是线程安全的。但是ObjectAtIndex不是。
  • copy。对于非可变类(NSString,NSArray)通常用copy修饰。因为若把可修改的子类,如NSMutableString赋值给父类NSString,这种情况属性所指向的对象可能被其他调用者改变。
  • weak。非拥有关系。与assign类似。与unsafe_unretained区别是,当属性所指对象的内存被回收时,属性值也会清空(置为nil)。

RunTime简介

一、基本概念

  1. RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制
  • 对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。
  • OC的函数调用成为消息发送。属于动态调研过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要十申明过就不会报错。调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。
  • 只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

二、知晓OC的方法调用在Runtime中具体的实现

  • OC代码调用一个方法

[self.loginBt login];

  • 在编译时RunTime会将上述代码转化成[发送消息]

objc_msgSend(self.loginB,@selector(login));

三、常见的作用

  1. 动态的添加对象的成员变量和方法
  • 动态交换两个方法的实现
  • 实现分类也可以添加属性
  • 实现NSCoding的自动归档和解档
  • 实现字典转模型的自动转换

相关文章

网友评论

      本文标题:runtime

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