Objective C中动态绑定Vs动态类型有什么区别

AAV*_*AAV 14 objective-c

我很难理解Objective C中动态绑定Vs动态类型之间的区别.有人可以解释一下吗?

jle*_*ehr 33

Objective-C中的动态类型意味着类型对象的类id在编译时是未知的,而是在将消息发送到对象时在运行时发现.例如,在以下代码中,在foo我们尝试发送消息之前,不知道类componentsSeparatedByString:.

id foo = @"One Two Three";
NSArray *a = [foo componentsSeparatedByString:@" "];
Run Code Online (Sandbox Code Playgroud)

如果不是使用id数据类型,我们已经完成了以下操作......

NSString *foo = @"One Two Three";
Run Code Online (Sandbox Code Playgroud)

...然后我们将使用静态类型而不是动态类型.

动态绑定意味着编译器不知道将选择哪个方法实现; 而是在发送消息时在运行时查找方法实现.它基本上帮助我们进行多态性.所以

[foo description]
Run Code Online (Sandbox Code Playgroud)

例如,如果foo是实例NSArray而不是实例,则会调用不同的方法实现NSString.


meg*_*gar 7

使用动态类型,您可以使用类型为id的变量来存储任何类型的对象.使用动态绑定,您可以执行此操作:id obj; [obj doWhatever];只要obj是实现-(void)doWhatever它的类型就可以使用.