协议之外
考虑一下协议。 我们在应用程序中广泛使用它们来委派操作,支持多重继承概念并在引用和值类型上创建复合功能。 更进一步,我们可以通过使类和类型定义符合协议来扩展它们。 我们可以定义协议类型变量并使我们的类型更灵活(不包括关联类型和自我需求协议)。
每个(不透明的)容器在内存中都有3个部分:
- 三个存储字的长度缓冲区,用于保存Value :如果值的大小大于3个字,则将其存储在堆中,并且地址保存在此处。
MemoryLayout.size(ofValue:alice)// 32字节
//因此将其存储在堆中,并将其地址保存在值缓冲区中
- 一个记忆词表示“ 元数据 ”
- 每种协议类型都有一个存储字,用于存储“ 协议见证表 ” 。 如果您的变量由N个不同的协议组成,则将其计算为N个存储字。
对于* protocol的声明*中的每个方法,都有一个指向其符合类型的实现的指针。 因此,当您在协议扩展中定义一个方法时,该方法将不会出现在见证表中,并且在您的变量上使用该方法时,它会被静态分派,并返回其默认实现,如上面的示例。
如果您想要重写的实现,则只需将其添加到协议声明部分,即可按预期工作😊
- 如何发送JSON格式的input嵌套在NSDictionary中的值
- iOS – 在web视图中显示HTML资源文件或远程网页的内容
- iOS 5:如何实现自定义(图像)后退button
- XCode5模拟器:未知选项字符“X”在:-Xlinker
- 在另一个类中,Swift Firebase身份validation无法正常工作
- 结构和类中的属性观察器
- 我的SearchDisplayController不能很好地处理UIViewController中的UITableView
- 标签栏控制器不是所有的UIViewControllers
- iPhone模拟器 – 如何检测应用程序在模拟器上运行(所以可以设置testing数据)?