当前位置: 主页 > 365bet手机注册 >

OC在运行时对动态语言意味着什么?什么是动态识

发布者:小编
来源:互联网 日期:2019-01-27 21:44 浏览()
动态:
主要原因是将数据类型决策从编译时延迟到运行时。
与此问题相关的两个问题是执行时间和多态性。
简而言之,运行时机制允许您在运行时确定对象的类,并调用该类对象的规范方法。
让我们考虑一下OC语言的动态特性。
OC的动态特性分为三个方面:动态类型,动态链接和动态负载。
它被称为动态,因为它需要在运行时执行。
(1)动态类型
动态类型,简单点是标识的类型。
动态类型与静态类型有关。
显式原始类型(如内部类型)是静态类型(int,NSString等)。
可以在编译时识别静态类型。
因此,如果程序没有响应该类型,编译器会发出警告。
编译编译器时无法识别动态类型,但您需要等到运行时。换句话说,根据执行程序时的上下文来识别它。
因此,有两个概念要区分。它是编译时和运行时。
Idobj = someInstance;
是的([objisKindOfClass:someClass]){
someClass * classSpecifiedInstance =(someClass *)obj;
(2)动态链接
动态链接似乎很难记住,但事实上它很简单。请记住关键字@ selector / SEL。
我们来看看这个功能吧。在其他静态语言(如C ++)中,被调用函数函数的签名通常在编译时传递给编译器。
静电,无法改变。
在OC中,实际上没有功能概念。我们称之为消息机制。所谓的函数调用是向对象发送消息。
此时,将出现动态链接功能。
OC首先省略编译,并在运行时动态添加对函数的调用。确定在运行时调用的方法和要传递的参数。
这是一个动态链接。要实现它,您需要将方法与SEL变量链接。
生成的SEL变量表示对方法的引用。
这里要记住的一件事是SEL不是C函数指针。这非常相似,但不是函数指针。
SEL变量只是一个整数。这是方法ID,@ selector()是类方法编号。
前一个函数调用是根据函数名称(即字符串)查找函数体。
但现在我们正在寻找基于ID整数的方法。整数搜索术语比字符串搜索快得多。
因此,动态链接的特殊性更方便,但也更有效。
由于OC的动态特性,OC中很少提及功能的概念。传统函数通常是OC中最常用的函数,将参数信息和函数实现分组为编译时编译的源代码,这是消息机制。
调用实例方法时要做的是向实例的指示器发送消息。在收到消息后,实例会从其实现中查找对消息的响应。
(3)动态负载
很容易理解如何根据您的要求加载所需的资源。对于iOS开发,它基本上适应不同的模型。
最典型的例子是在Retina设备上加载@ 2 x图像并将原始图像加载到旧的常规屏幕设备中。