Objtive-C 动态语言的理解

Objective-C Is a Dynamic Language , 那么对于Objective-C的动态性可以从三个方面去了解:

  • Dynamic typing ,是指在判定该类的类型是在运行期间。
  • Dynamic binding,是指在运行的时候确定调用方法
  • Dynamic loading ,是指在运行的时候可以添加一些方法,类和其他需要的模块。

1.动态类型

  • 对于动态类型,Objective-C中的关键字 id ,可以定义通用类型指针。
  • 父类指针也可以指向子类的实例对象。在编译期指针类型为父类,运行后可判断为具体的某个子类。
  • NSArray * someArray = @"Hello, World!"
    在编译期someArray被认为NSArray类型,运行后则为NSString类型。也是动态类的体现。

2.动态绑定

Objective-C中,一个对象内否调用指定的方法不是由编译器决定而是由运行时决定。动态绑定是实现OC多态的基础,多态指的是不同对象对同一方法有着不同实现。

个人的理解,查找IMP的过程就是一个动态绑定的过程

3.动态加载

  • 动态加载类,使用 objc_allocateClassPair``函数,添加要动态创建的类,用objc_registerClassPair`函数注册这个类。
  • 动态添加方法,实例变量等 :通过class_addMethodclass_addIvar 等动态添加方法,变量。
  • 动态添加属性, 在分类(category)中添加属性,只会生成settergetter,如想实现添加变量,需要使用对象关联。objc_getAssociatedObject()objc_setAssociateObject()

你可能感兴趣的:(Objtive-C 动态语言的理解)