Objective-C作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定、动态加载等)。
动态:必须到运行时(runtime)才会做的一些事情。
- 静态语言 :静态类型语言的数据类型是在编译期间检查的,也就是说在
写程序时
要声明
所有变量的数据类型。C/C++
是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
- 动态语言**:**是指在
运行期间
才去做数据类型检查的语言。也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
- 强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
- 弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反,一个变量可以赋不同数据类型的值。
Objective-C具有相当多的动态特性,表现为三方面:
- 动态类型(Dynamic typing):即运行时再决定对象的类型。这种动态特性在日常的应用中非常常见,简单来说就是id类型。事实上,由于静态类型的固定性和可预知性,从而使用的更加广泛。静态类型是强类型,而动态类型属于弱类型,运行时决定接受者。
- 动态绑定(Dynamic binding):基于动态类型,在某个实例对象被确定后,其类型便被确定了,该对象对应的属性和响应消息也被完全确定。
- 动态加载(Dynamic loading):根据需求加载所需要的资源。最基本就是不同机型的适配,例如,在
Retina
设备上加载@2x
的图片,而在老一些的普通苹设备上加载原图,让程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件,可执行代码可以含有和程序运行时整合的新类。