b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

面向对象开发过程 iOS开发:Runtime解析

电脑杂谈  发布时间:2018-02-20 21:52:40  来源:网络整理

面向对象方法的要点_面向对象开发过程_面向对象开发步骤

在iOS开发过程中,使用Runtime的场景虽然没有GCD多,但是也是一个不容忽视的模块,而且在面试找工作的时候也是面试官必考题。那么下面就来了解一下Runtime的相关知识,大牛请绕行,不喜勿喷。

一、Runtime概念

1.Runtime,又叫运行时,是一套关于底层的C语言API,为iOS内部的核心之一,我们在编写OC代码的时候,底层都是基于它来实现的。

eg:[receiver message];

底层运行时会被编译器转化为:

objc_msgSend(receiver, selector)

如果它还有参数,比如:

[receiver message:(id)arg...];

底层运行时,会被编译器转化为:

objc_msgSend(receiver, selector, arg1, arg2, ...)

2.为什么需要Runtime:

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

3.Runtime的作用:

Objective-C在三种层面上与Runtime系统进行交互:

1.通过OC源代码

只需要编写OC代码,Runtime系统自动在后台搞定一切,调用方法,编译器会将OC代码转换成运行时代码,在运行时确定数据结构和函数。

2.通过Foundation框架的NSObject类定义的方法

Cocoa程序中绝大部分类都是NSObject类的子类,所以都继承了NSObject的行为。(NSProxy类是个例外,它是个抽象超类)

一些情况下,NSObject类仅仅定义了完成某件事情的模板,并没有提供所需要的代码。例如-description方法,该方法返回类内容的字符串表示,该方法主要用来调试程序。NSObject类并不知道子类的内容,所以它只是返回类的名字和对象的地址,NSObject的子类可以重新实现。

还有一些NSObject的方法可以从Runtime系统中获取信息,允许对象进行自我检查。例如:

-class方法返回对象的类;

-isKindOfClass: 和 -isMemberOfClass: 方法检查对象是否存在于指定的类的继承体系中(是否是其子类或者父类或者当前类的成员变量);

-respondsToSelector: 检查对象能否响应指定的消息;

-conformsToProtocol:检查对象是否实现了指定协议类的方法;

-methodForSelector: 返回指定方法实现的地址。

3.通过对Runtime库函数的直接调用

Runtime系统是具有公共接口的动态共享库。头文件存放于/usr/include/objc目录下,这意味着开发者使用时只需要引入objc/Runtime.h头文件即可。

许多函数可以让你使用C语言来实现Objc中同样的功能。除非是写一些OC与其他语言的桥接或是底层的debug工作,开发者在写OC代码时一般不会用到这些C语言函数。

二、Runtime的相关术语

1.SEL

它是selector在OC中的表示(Swift中是Selector类)。selector是方法选择器,其实作用就和名字一样,日常生活中,我们通过人名辨别谁是谁,注意OC在相同的类中不会有命名相同的两个方法。selector 对方法名进行包装,以便找到对应的方法实现。它的数据结构是:typedef struct objc_selector *SEL;


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-86234-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...