365bet亚洲娱乐场

主页 > 365bet最新备用网站 >

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

动态:
主要原因是将数据类型确定从编译时延迟到运行时。
这个问题实际上有两个概念,运行时和多态。
简而言之,运行时机制允许您确定直到运行时的对象的类,并调用该类对象的指定方法。
让我们考虑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开发的情况下,基本上它适应各种模型。
最经典的示例是将@ 2x图像加载到Retina设备中,并将原始图像加载到旧的常规屏幕设备中。