09 2018 档案
摘要:1、类型系统; 2、函数指令系统; 3、运行时系统; 4、api系统; 运行时系统包含: 1)类型运行时系统; 2)函数的动态派发系统; 3)内存管理、多线程(cpu、内存基本使用)、异常处理等; 指令系统依赖与类型系统,类型系统为函数指令系统提供上线文(编译时和运行时)。 类型系统:主要包含内存布
阅读全文
摘要:Overview You can use Objective-C and Swift files together in a single project, no matter which language the project used originally. This makes creati
阅读全文
摘要:Overview You can work with types declared in Swift from within the Objective-C code in your project by importing an Xcode-generated header file. This
阅读全文
摘要:Objective-C没有命名空间,为了避免冲突,Objective-C的类型一般都会加上两到三个字母的前缀,比如Apple保留的NS和UI前缀,各个系统框架的前缀,各个系统框架的前缀SK(StoreKit),CG(CoreGraphic)等。 Swift的命名空间是基于module而不是在代码中显
阅读全文
摘要:类型系统是编程语言的基石 Type systems are generally formulated as collections of rules for checking the “con- sistency” of programs. This kind of checking exposes
阅读全文
摘要:泛型类型是高阶类型的必经之路。
阅读全文
摘要:具体类型:能够初始化; 抽象类型:不能直接初始化; 类型参量:泛型和高阶类型的通道; 类型约束:泛型到高阶类型的通道。 基础类型; 结构类型; 容器类型; 高阶类型; 泛型、抽象类型: 类型是否能够直接初始化。 低阶类型与高阶类型的转化。
阅读全文
摘要:类型转化:任意类型、继承体系类型、基础类型的平级转化; 类型变化:值类型与容器类型的迭代变换。适配器模式、代理模式等。
阅读全文
摘要:Swift 的 extension 机制很强大,不仅可以针对自定义的类型,还能作用于系统库的类型,甚至基础类型比如 Int。当在对系统库做 extension 的时候,就会涉及到一个命名冲突的问题。Objective-C 时代的通行解决办法是在扩展方法名字的最前面加上 XXX_ 形式的前缀。这种形式
阅读全文
摘要:最近在看一些Swift开源库的时候,发现了一些优秀的开源库都使用了命名空间,例如Kingfisher这个开源库中,就针对UIImage,UIImageView,UIButton做了命名空间的扩展。通过logoImageView.kf.setImage(url)这种方式能够很好地避免扩展的命名冲突,而
阅读全文
摘要:Functor,即函子,是 Haskell 中普遍存在的、最基本的类型类。你可以用以下两种方式来理解 Functor: 它代表某种容器,该容器能够将某一函数应用到其每一个元素上。 它代表某种“可计算上下文”(computational context)。 https://www.cnblogs.co
阅读全文
摘要:class GooClass { deinit { print("aaaaaaaa") } var str = "gooClass" } struct GooStruct { var goo = GooClass() } extension ViewController{ var gooStruct
阅读全文
摘要:Locations for Public Frameworks Third-party frameworks can go in a number of different file-system locations, depending on certain factors. Most publi
阅读全文
摘要:swift派发机制的核心是确定一个函数能否进入动态派发列表
阅读全文
摘要:能自证的任意类型即为动态类型; 扩展:能自证的继承体系类型即为动态类型(小);
阅读全文
摘要:1、编译器只对确定类型进行检查; 2、类型转换是否能够成功有没有明确的判断;编译时or运行时; 3、任意类型不参与编译时类型检查; 任意类型不能直接参与运算,必须转化为确定的类型; 任意类型转化为确定类型是否需要显式转化。 强类型:类型检查(编译时)和转化(运行时)都有明确的状态信息; 中类型:类型
阅读全文
摘要:动态类型:变量的实际类型信息能够在在运行时(获取)确定;编译时不做类型检查。 弱类型:变量的类型信息能够在运行时改变。
阅读全文
摘要:Swift Intermediate Language (SIL) https://github.com/apple/swift/blob/master/docs/SIL.rst#witness-method
阅读全文
摘要:VTables https://github.com/apple/swift/blob/master/docs/SIL.rst#vtables decl ::= sil-vtable sil-vtable ::= 'sil_vtable' identifier '{' sil-vtable-entr
阅读全文
摘要:In this example: protocol MyProtocol { func testFuncA() } extension MyProtocol { func testFuncA() { print("MyProtocol's testFuncA") } } class MyClass
阅读全文
摘要:Swift protocol extension method is called instead of method implemented in subclass protocol MyProtocol { func methodA() func methodB() } extension My
阅读全文
摘要:1、v-table; class 2、WitnessTable protocol 3、消息派发。 @objc dynamic
阅读全文
摘要:顶级修饰 次级修饰 赋值类型 存储类型 值类型 值类型 深拷贝 栈 值类型 引用类型 浅拷贝 堆 引用类型 值类型 浅拷贝 堆 引用类型 引用类型 浅拷贝 堆 复合引用类型会改变内部值类型的存储行为。 以上内容为推测
阅读全文
摘要:运行时与动态是一个密切相关的概念: 动态加载; 动态类型识别; 动态派发; 内存管理; In the object-oriented programming languages, the runtime system was often also responsible for dynamic ty
阅读全文
摘要:两种参数传递方式 值类型 传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据。 引用类型 把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据。 在 Swift 众多数据类型中,只有 class 是引用类型,其余的如 Int、Float、Bool、Character、Array
阅读全文
摘要:1、检查protocol本体是否声明调用函数; 2、如果没有,检查protocol扩展是否有该函数;如果扩展中也没有,报错; 3、如果本体声明了函数,使用动态派发机制进行派发;扩展中的实现位于最末位。
阅读全文
摘要:We learned in the Protocol-Oriented Programming session at WWDC 2015 that Swift uses two different dispatch mechanisms for methods in protocol extensi
阅读全文
摘要:引用类型 (Reference Type Matters) 引用的类型决定了派发的方式. 这很显而易见, 但也是决定性的差异. 一个比较常见的疑惑, 发生在一个协议拓展和类型拓展同时实现了同一个函数的时候. protocol MyProtocol { } struct MyStruct: MyPro
阅读全文
摘要:@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. @
阅读全文
摘要:以NSObject为基类,只是为了提供Objective-C API的使用入口; 经由@object修改的对象,是这些api的参量。 NSObject是swift与oc特有机制沟通的桥梁。 Subclassing NSObject in Swift gets you Objective-C runt
阅读全文
摘要:Objective-C entry points https://github.com/apple/swift-evolution/blob/master/proposals/0160-objc-inference.md Before Swift 4, the compiler made some
阅读全文
摘要:1、扩展中无法继承重写已有函数,不能添加函数。 Extensions can add new functionality to a type, but they cannot override existing functionality. https://docs.swift.org/swift-
阅读全文
摘要:Objective-C 的动态性是由 runtime 相关的库赋予的。 当然其他语言也完全可以运行在一个 Runtime 库上而获得动态性,由于多数高级语言的诞生都对应着一种编译器,因此将编译器的特性概括进语言里讲,也不是不可以。 http://www.cocoachina.com/ios/2016
阅读全文
摘要:class 是引用类型,生成的实例分布在 Heap(堆) 内存区域上,在 Stack(栈)只存放着一个指向堆中实例的指针。因为考虑到引用类型的动态性和 ARC 的原因,class 类型实例需要有一块单独区域存储类型信息和引用计数。 在 Swift 中,class 类型的方法派发是通过 V-Table
阅读全文
摘要: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
阅读全文
摘要:动态类型:能够使程序直到执行的时候才确定所属的类。 动态绑定:能够使程序直到执行的时候才能确定要对对象调用的实际方法。 动态类型关注运行时类型信息; 动态绑定关注调用什么方法; 动态类型是动态绑定的基础。 类型系统是多态的基础。
阅读全文
摘要:一、类型系统: 1、完全动态类型:对象的类型未id(oc语言)等,与顶级基类对应;可以调用顶级基类的函数及使用定制手段进行实际类型的函数调用。 2、继承动态类型:对象属于继承体系的一部分,基类的类型可以表征继承体系中任一类型的对象;基类对应于上面的顶级类型; 3、静态类型:编译时已确定的类型; 二、
阅读全文
摘要:动态类型的关键是将动态对象与实际类型信息绑定。 See also: Dynamic programming language and Interpreted language Dynamic type checking is the process of verifying the type saf
阅读全文
摘要:New operators are declared at a global level using the operator keyword, and are marked with the prefix, infix or postfix modifiers: prefix operator +
阅读全文
摘要:precedencegroup ChainingPrecedence { associativity: left higherThan: TernaryPrecedence } infix operator >>- : ChainingPrecedence 重点在这: postfix operato
阅读全文
摘要:只实现 getter 方法的属性被称为计算型属性,等同于 OC 中的 ReadOnly 属性 计算型属性本身不占用内存空间 不可以给计算型属性设置数值 计算型属性可以使用以下代码简写 计算型属性与懒加载的对比 计算型属性 不分配独立的存储空间保存计算结果 每次调用时都会被执行 更像一个函数,不过不能
阅读全文
摘要:struct Stack<Element> { var items = [Element]() func push(_ item:Element){ self.items.append(item) } mutating func pop() -> Element{ return self.items
阅读全文
摘要:1、通信机制:解决是否能通信的问题; 2、接口:解决调用会话问题; 3、数据、URL正确性;解决数据、URL跳转路径正确性问题。
阅读全文
摘要:In addition to stored properties, classes, structures, and enumerations can define computed properties, which do not actually store a value. Instead,
阅读全文
摘要:与数据结合:对数据进行操作; 与行为结合:使用原有行为生成更便捷的行为; 与协议结合:实现协议; 与类型结合:对类型数据进行操作,添加新的行为; 与关联类型、泛型结合:对类型做出限定。
阅读全文
摘要:let components = URLComponents(url: fakeUrl, resolvingAgainstBaseURL: false)! http://10.100.140.84/m/cashboard/cost/02?yyyyMM=2018-06&tabFlag=02 - sch
阅读全文
摘要:automaticallyAdjustsScrollViewInsets:在导航栏透明时用到 In your viewDidLoad method, add if([self respondsToSelector:@selector(edgesForExtendedLayout)]) self.ed
阅读全文
摘要:https://my.oschina.net/w11h22j33/blog/208574 关于UIView的Layer,IOS提供了三个方法: 1、layoutSubviews 在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6开始)的版本,此方法的缺
阅读全文
摘要:所以总结下onMeasure()的作用: 1.onMeasure()方法是measure()调用的。 2.onMeasure()方法的作用是要计算出当前控件自身所需要的大小是多少,计算的根据是在xml或者代码中设置的宽度和高度的参数,参数指明了要求你是填充父控件(match_parent)还是包裹内
阅读全文
摘要:Margin来自ChildView的LayoutParams, 属于ChildView。 Padding来自ParentView的Padding属性, 属于ParentView。 Android有一套不成文的测量规范,体现在其定义的函数和原生复合View的源码中,View/ViewGroup提供了一
阅读全文
摘要:[译]Android view 测量布局和绘制的流程 原文链接 创造优秀的用户体验是我们开发者的主要目标之一.为此, 我们首先要了解系统是如何工作的, 这样我们才可以更好的与系统配合, 从它的优点中获益, 规避它的缺陷. 之前关于Android渲染过程的文章 这次我们主要关注Measure/Lay
阅读全文
摘要:By specifying NSAllowsArbitraryLoadsInWebContent, you are overriding NSAllowsArbitraryLoads on iOS 10. In iOS 10 and later, and macOS 10.12 and later,
阅读全文