Introducing Swift - Protocols

Introducing Swift - Protocols

本文主要记录在学习Swift中【协议】时的笔记。


协议语法

// 定义
protocol SomeProtocol {
    // something ... 
}

// 使用
class SomeClass: SomeSuperClass, SomeProtocol {
    // protocol implementation ...
}

属性要求

协议可以用于要求其遵循者必须具有某些属性,可以要求属性的读写权限,但是不会要求属性是存储型还是计算型。

通过class关键字要求一个类必须具有的实体,通过static关键字要求一个结构体或者枚举必须具有的实体。


方法要求

协议可以用于要求其遵循者必须实现某些实例方法和类方法。和类中定义方法不同的是,协议方法支持变长参数,不支持默认参数。

通过class关键字要求一个类必须具有的实体,通过static关键字要求一个结构体或者枚举必须具有的实体。

如果协议中声明的一个方法需要去改变类或者结构体或者枚举中的某一个属性,那么需要将其声明为mutating方法。用class实现协议中的mutating方法时,不用写mutating关键字;用结构体,枚举实现协议中的mutating方法时,必须写mutating关键字。


委托(代理)模式

委托是一种设计模式,它允许一个对象将某些特定的操作交由其代理来实现。我们通过协议来声明这些操作,然后由代理对象去实现这些操作。和OC不同的是,我们有了更优雅的写法:

delegate?.doSomething(param)

当delegate为空时,后边的语句会优雅的忽略~


在扩展中使用协议

extension SomeClass: SomeProtocol {
    // protocol implementation ...
}

如果一个类已经实现了某一个协议的方法,但是没有声明,我们也可以通过扩展来声明:

extension SomeClass: SomeProtocol {}

之所以要这样做,是因为即使类已经满足了协议所要求的属性和方法,但是类型也不会自动转变,如果不声明,这个类依旧不是一个遵循了特定协议的类。


协议的继承

协议支持多继承,类仅支持单继承。


协议一致性检验

  1. 使用is检查实例是否遵循了某个协议;
  2. 使用as?返回一个可选值,如果实例遵循了协议,返回协议类型,否则返回nil;
  3. 使用as用于强制向下换型。
  4. @objc用来表示协议是可选的(同时在相关方法和属性前面加上@optional关键字),也可以用于表示暴露给OC的代码,此外,@objc型协议只对类有效,因此只能在类中检查协议的一致性。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux block IO(块输入输出)是Linux操作系统的IO子系统,用于管理块设备(例如硬盘和SSD)的访问。在多核系统上引入多队列SSD访问是一种优化措施。 传统上,Linux操作系统在处理块设备访问时,使用单个队列(queue)来处理所有IO请求。这种单队列设计对于单核系统来说是合适的,因为只有一个CPU核心可以处理IO请求。然而,在多核系统中,这种设计却成为了性能瓶颈,因为所有的IO请求都必须经过单个队列,即使有多个CPU核心是可用的。 为了解决这个问题,Linux引入了多队列SSD访问功能。这意味着在多核系统上,每个CPU核心都有一个独立的队列来处理IO请求。每个队列可以独立处理IO请求,而不会受到其他队列的干扰。这种设计可以提高系统的并发性和吞吐量。 多队列SSD访问还可以充分利用SSD设备的性能特点。SSD设备通常具有多个通道(channel)和多个闪存芯片(chip),每个通道和芯片都可以同时处理IO请求。通过将IO请求分配给多个队列,可以同时利用多个通道和芯片,从而提高SSD的性能。 在Linux中实现多队列SSD访问需要对内核进行相应的修改和配置。用户可以通过命令和配置文件来设置每个队列的属性和参数,以满足特定场景下的需求。 总之,通过引入多队列SSD访问,Linux在多核系统上可以更好地利用硬件资源,提高系统的性能和吞吐量。这是一个重要的优化措施,可以提高块设备访问的效率和响应速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值