目录
Objective-C是一种动态语言,但它也具有静态语言的一些特性。
以下是对Objective-C动态性和静态性的详细解释:
语言的动态特性
动态类型检查
变量的类型可以在运行时检查和改变。
比如 id 类型
id dynamicObject = [SomeClass new];
if ([dynamicObject isKindOfClass:[SomeOtherClass class]]) {
// Do something with dynamicObject
}
比如:多肽
动态方法分派
方法调用在运行时决定,而不是在编译时绑定。(这意味着你可以在运行时改变方法的实现或者替换方法。)
使用消息传递机制,而不是直接的函数调用(函数地址调用)
[receiver performSelector:@selector(methodName) withObject:argument];
比如:方法交换
反射:
可以在运行时检查和修改对象的结构和行为
比如:查询所有的属性和方法
比如:方法交换
比如:动态添加方法
语言的静态特性
编译时类型检查:
尽管有动态特性,Objective-C也支持编译时类型检查,特别是当使用显式类型声明时。
静态绑定:
尽管属性的存取方法和类方法调用也是通过消息发送机制实现的,
但编译器可以对这些方法调用进行优化,使其在编译时确定调用目标,从而提升性能。
行者常至,为者常成!