【发布时间】:2014-07-26 06:56:25
【问题描述】:
我用 Swift 测试了一些isa swizzling,发现它只在 NSObject 是超类(直接或更高级)或使用“@objc”装饰时才有效。否则它将遵循静态和 vtable-dispatch 样式,如 C++。
在没有 Cocoa/NSObject 基类的情况下定义 Swift 类是否正常?如果我担心这意味着放弃了 Objective-C 的大部分动态,例如方法拦截和运行时自省。
动态运行时行为是属性观察器、核心数据、Aspect Oriented Programming、Higher Order Messaging、分析和日志框架等功能的核心。
使用 Objective-C 的方法调用风格会在方法调用中添加大约 20 个机器代码操作数,因此在某些情况下(对具有小主体的方法的许多紧密调用)C++ 风格的静态和 vtable 调度可以表现更好。
但是考虑到一般的 95-5 规则(95% 的性能提升来自调整 5% 的代码),从强大的动态特性开始并强化 where 是否有意义?必要的?
【问题讨论】:
-
相关:Swift 是否支持面向方面的编程? stackoverflow.com/a/24137487/404201
标签: objective-c swift objective-c-runtime