1:动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading)。

动态类型:即运行时再决定对象的类型。简单说就是id类型。id类型即通用的对象类,任何对象都可以被id指针所指。

动态绑定:动态绑定确定该对象对应的属性和响应的消息。

动态加载:加载资源。

  • oc作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定,动态加载)。总体来讲,OC确实是一门不错的编程语言。

  • Object-C具有相当多的动态特性,表现为三个方面:动态类型(Dynamic typing)、动态绑定(Dynamic binding)和动态加载(Dynamic loding)。动态--必须到运行时(run time)才会做的一些事情。

  • 动态类型:即运行时在决定对象的类型,这种动态特性在日常的应用中非常的常见,简单来说就是id类型。事实上,由于静态类型的固定性和可预知性,从而使用的更加的广泛。静态类型在编译的时候就能识别出来,所以,若程序发生类型不对应,编译器会发出警告。动态类型编译器编译的时候是不能识别的,要等到运行时(run time),即程序运行的时候才会根据语境识别。静态类型是强类型,而动态类型属于弱类型,运行时决定接受者。

  • 动态绑定:基于动态类型,在某个实例对象被确定后,其类型便被确定了,该对象对应的属性和响应消息也被完全的确定了。在oc中没,函数的概念,我们叫“消息机制”。所谓的函数调用就是给对象发一条消息。这时,动态绑定的特性就来了。oc可以先跳过编译,到运行的时候才动态的添加和调用函数,在运行时才决定要调用什么方法,需要传什么参数进去,这就是动态绑定。

  • 动态加载:根据需求加载所需要的资源,最基本就是不同的机型配置,例如,在Retina设备上加载@2x的图片,而在老一些的的普通苹果设备上加载原图,让程序在运行时添加代码模块以及其他资源。用户可根据需求加载一些可执行的代码资源,而不是在在启动的时候就加载所有的组件,可执行代码可以含有和程序运行时整合的新类。

补充:
SEL类型:Objective-C在编译的时候,会根据方法的名字 (包括参数序列),生成一个用来区分这个方法的唯一的一个标示(ID),这个标示(ID)就是SEL类型的,在运行时候是通过方法的标示来查找方法的。只要方法的名字(包括参数序列)相同,那么它们的 ID都是相同的。

41 (OC)* OC的理解与动态特性的更多相关文章

  1. OC动态特性

    今天是2.15周日,快要过年了,我以一个实习生的身份在公司工作了快要两个月了吧,什么是北漂,北漂就是感觉生活节奏变了,以前困了可以上课睡觉,累了可以回家休息数周,人际交往乏了,可以躲起来看着窗外的雨或 ...

  2. iOS 深入Objective-C的动态特性

    深入Objective-C的动态特性 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和 ...

  3. 深入Objective-C的动态特性 Runtime

    Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loadin ...

  4. Ruby基础类型,动态特性,代码块

    #Ruby内置基础数据类型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash #Numerice 1.分为I ...

  5. WPF:理解ContentControl——动态添加控件和查找控件

    WPF:理解ContentControl--动态添加控件和查找控件 我认为WPF的核心改变之一就是控件模型发生了重要的变化,大的方面说,现在窗口中的控件(大部分)都没有独立的Hwnd了.而且控件可以通 ...

  6. JavaScript的动态特性(通过eval,call,apply和bind来体现)

    JavaScript的动态特性(通过eval,call,apply和bind来体现) JavaScript是一种基于面向对象的.函数式的.动态的编程语言.现在发展到已经可以用在浏览器和服务器端了. 这 ...

  7. iOS 动态特性和RunTime

    过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型语言转过来的,如Java或C#,当然也有直接以Objective-C作为入门语 ...

  8. JS动态特性

    var arr=[]; arr['js']='jquery'; arr['css']='oocss'; var obj={}; for(var i in arr) { obj[i]=arr[i]; } ...

  9. ios Objective-C的动态特性

    这是一篇译文,原文在此,上一篇文章就是受这篇文章启发,这次干脆都翻译过来. 过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型语 ...

随机推荐

  1. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总

    广告系统学习过程中问题答疑 博客园 Eureka集群启动报错 Answer 因为Eureka在集群启动过程中,会连接集群中其他的机器进行数据同步,在这个过程中,如果别的服务还没有启动完成,就会出现Co ...

  2. react native https

    1. ios解决方案 1.1 Xcode打开工程,Libraries -> RCTNetworking -> RCTHTTPRequestHandler.mm -> #pragma ...

  3. Linux源码包安装apache(httpd)

    我这里实验是用的CentOS7 #事先先检查一下自己的linux是否安装apache [root@localhost ~]#rpm –q httpd #如果已安装则先卸载原来的apache [root ...

  4. SpringMVC源码分析2:SpringMVC设计理念与DispatcherServlet

    转自:https://my.oschina.net/lichhao/blog SpringMVC简介 SpringMVC作为Struts2之后异军突起的一个表现层框架,正越来越流行,相信javaee的 ...

  5. 学会了这些技术,你离BAT大厂不远了

    每一个程序员都有一个梦想,梦想着能够进入阿里.腾讯.字节跳动.百度等一线互联网公司,由于身边的环境等原因,不知道 BAT 等一线互联网公司使用哪些技术?或者该如何去学习这些技术?或者我该去哪些获取这些 ...

  6. yolo v2

    https://blog.csdn.net/wfei101/article/details/79398563 https://blog.csdn.net/oppo62258801/article/de ...

  7. UVA 10395 素数筛

    Twin Primes Twin primes are pairs of primes of the form (p; p + 2). The term \twin prime" was c ...

  8. 安装VMware Workstation时遇到Microsoft Runtime DLL安装程序未能完成安装

    解决:这时不要点确定.开始菜单运行输入‘%temp%’,在弹出的窗体中找到一个文件名中含‘{XXXXXXXXXXXXX}~setup'的文件夹,打开里面会看到有 xxx.msi的,运行就开始vmwar ...

  9. babel-loader与babel-core的版本对应关系

    babel-loader 8.x对应babel-core 7.xbabel-loader 7.x对应babel-core 6.x如何解决1. 卸载旧的babel-corenpm un babel-co ...

  10. 【牛客Wannafly挑战赛12】 题解

    传送门:https://www.nowcoder.com/acm/contest/79#question 说是比赛题解,其实我只会前三题: 后面的一定补 T1 题意,在一个长度为n的时间内,问如何选择 ...