在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Objective-C 和 Swift 在底层使用的是两套完全不同的机制,Cocoa 中的 Objective-C 对象是基于运行时的,它从骨子里遵循了 KVC (Key-Value Coding,通过类似字典的方式存储对象信息) 以及动态派发 (Dynamic Dispatch,在运行调用时再决定实际调用的具体实现)。而 Swift 为了追求性能,如果没有特殊需要的话,是不会在运行时再来决定这些的。也就是说,Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找,而可以直接使用。 显而易见,这带来的问题是如果我们要使用 Objective-C 的代码或者特性来调用纯 Swift 的类型时候,我们会因为找不到所需要的这些运行时信息,而导致失败。解决起来也很简单,在 Swift 类型文件中,我们可以将需要暴露给 Objective-C 使用的任何地方 (包括类,属性和方法等) 的声明前面加上
Objective-C 的话是无法使用中文来进行调用的,因此我们必须使用
这样,我们在 Objective-C 里就能调用 另外,正如上面所说的以及在 Selector 一节中所提到的,即使是 如果我们确定使用这些内容的动态特性的话,我们需要手动给它们加上 但是需要注意的是,添加 如果你需要和 Objective-C 里动态调用时相同的运行时特性的话,你需要使用的修饰符是 一般情况下在做 app 开发时应该用不上,但是在施展一些像动态替换方法或者运行时再决定实现这样的 "黑魔法" 的时候,我们就需要用到 在 KVO 一节中,我们提到了一个关于使用 关于 Swift 和 Objective-C 混用的一个好消息是,随着 Swift 的发展,Apple 正在努力改善 SDK。 在 Objective-C 中添加的
本文来自王巍的@OBJC 和 DYNAMIC |
请发表评论