摘要: 1、检查protocol本体是否声明调用函数; 2、如果没有,检查protocol扩展是否有该函数;如果扩展中也没有,报错; 3、如果本体声明了函数,使用动态派发机制进行派发;扩展中的实现位于最末位。 阅读全文
posted @ 2018-09-19 19:30 zzfx 阅读(184) 评论(0) 推荐(0) 编辑
摘要: We learned in the Protocol-Oriented Programming session at WWDC 2015 that Swift uses two different dispatch mechanisms for methods in protocol extensi 阅读全文
posted @ 2018-09-19 19:27 zzfx 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 引用类型 (Reference Type Matters) 引用的类型决定了派发的方式. 这很显而易见, 但也是决定性的差异. 一个比较常见的疑惑, 发生在一个协议拓展和类型拓展同时实现了同一个函数的时候. protocol MyProtocol { } struct MyStruct: MyPro 阅读全文
posted @ 2018-09-19 19:11 zzfx 阅读(257) 评论(0) 推荐(0) 编辑
摘要: @objc vs @objc dynamic @objc: Objective-C entry points One can explicitly write @objc on any Swift declaration that can be expressed in Objective-C. @ 阅读全文
posted @ 2018-09-19 18:17 zzfx 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 以NSObject为基类,只是为了提供Objective-C API的使用入口; 经由@object修改的对象,是这些api的参量。 NSObject是swift与oc特有机制沟通的桥梁。 Subclassing NSObject in Swift gets you Objective-C runt 阅读全文
posted @ 2018-09-19 17:47 zzfx 阅读(1417) 评论(0) 推荐(0) 编辑
摘要: Objective-C entry points https://github.com/apple/swift-evolution/blob/master/proposals/0160-objc-inference.md Before Swift 4, the compiler made some  阅读全文
posted @ 2018-09-19 17:30 zzfx 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 1、扩展中无法继承重写已有函数,不能添加函数。 Extensions can add new functionality to a type, but they cannot override existing functionality. https://docs.swift.org/swift- 阅读全文
posted @ 2018-09-19 16:47 zzfx 阅读(888) 评论(0) 推荐(0) 编辑
摘要: Objective-C 的动态性是由 runtime 相关的库赋予的。 当然其他语言也完全可以运行在一个 Runtime 库上而获得动态性,由于多数高级语言的诞生都对应着一种编译器,因此将编译器的特性概括进语言里讲,也不是不可以。 http://www.cocoachina.com/ios/2016 阅读全文
posted @ 2018-09-19 16:01 zzfx 阅读(297) 评论(0) 推荐(0) 编辑
摘要: class 是引用类型,生成的实例分布在 Heap(堆) 内存区域上,在 Stack(栈)只存放着一个指向堆中实例的指针。因为考虑到引用类型的动态性和 ARC 的原因,class 类型实例需要有一块单独区域存储类型信息和引用计数。 在 Swift 中,class 类型的方法派发是通过 V-Table 阅读全文
posted @ 2018-09-19 15:13 zzfx 阅读(240) 评论(0) 推荐(0) 编辑
摘要: Normally, in a typed language, the dispatch mechanism will be performed based on the type of the arguments (most commonly based on the type of the rec 阅读全文
posted @ 2018-09-19 12:14 zzfx 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 动态类型:能够使程序直到执行的时候才确定所属的类。 动态绑定:能够使程序直到执行的时候才能确定要对对象调用的实际方法。 动态类型关注运行时类型信息; 动态绑定关注调用什么方法; 动态类型是动态绑定的基础。 类型系统是多态的基础。 阅读全文
posted @ 2018-09-19 12:03 zzfx 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 一、类型系统: 1、完全动态类型:对象的类型未id(oc语言)等,与顶级基类对应;可以调用顶级基类的函数及使用定制手段进行实际类型的函数调用。 2、继承动态类型:对象属于继承体系的一部分,基类的类型可以表征继承体系中任一类型的对象;基类对应于上面的顶级类型; 3、静态类型:编译时已确定的类型; 二、 阅读全文
posted @ 2018-09-19 11:49 zzfx 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 动态类型的关键是将动态对象与实际类型信息绑定。 See also: Dynamic programming language and Interpreted language Dynamic type checking is the process of verifying the type saf 阅读全文
posted @ 2018-09-19 11:40 zzfx 阅读(160) 评论(0) 推荐(0) 编辑