因为Swift的操作在高层并且也得与Objc联合起来干活,用Swift写的程序一般会被Objc和Swift运行时处理.因为Swift的本性——换句话说,它是一门静态语言——Swift运行时在一些关键地方和Objc运行时有很大的不同.
其中最大的最重要的一个不同就是Swift如何在运行时处理方法的分发.
和Objc相反,Swift并不允许Objc中高动态的方法解析——消息传递.许多Objc经典的特性,比如响应并不在特定类中定义实现方法的消息,它使得”swizzle”方法(就是在运行时替换其他类中的方法)成为可能,并且它有能力在运行时定义方法,这在Swift中可是天方夜谭.
但怎么说呢,有得就有失,作为补偿Swift允许高类型安全,在理论上,改善了方法分发的性能.(Objc的方法分发机制与C++之类的语言相比会比较慢,因为实现上必须在运行时查找哈希表——尽管要感谢Objc运行时所做的一些技巧,性能损失一般可以忽略不计)
Swift不像Objc那样使用方法动态方法分发系统,作为替代Swift使用虚方法表(virtual method tables),或者成为tables.虚方法表也同样被用在C++语言的方法分发里哦.
时间: 2024-10-14 05:53:25