将结构体设置为可编码/可解码而不只是可编码是否有任何性能优势?

Alw*_*ing 3 ios swift codable decodable encodable

对于要序列化的示例结构: Person

struct Person {
    let firstName: String
    let lastName: String
}
Run Code Online (Sandbox Code Playgroud)

我们可以使其符合EncodableDecodableCodable协议。我知道我们在Encodable和 之间的选择Decodable取决于用例(例如,如果我们正在访问 API 并且不需要解码包含相同类型的响应),但我们也可以使其符合Codable如果结构是两者都用于编码和解码。

如果我们严格需要该结构体用于编码或解码,但不是两者,那么从性能角度来看,仅使用包罗万象Codable而不是指定Encodable/Decodable一致性是一个坏主意吗?

使用Codable而不是指定Encodable/的一个明显缺点Decodable是,另一个程序员可能会将该结构误解为用于编码和解码,而实际上只有两者之一发生。但如果我对性能非常感兴趣怎么办?

Rob*_*ier 6

“性能”不存在单一维度。这取决于你的意思。例如,Encodable在不需要时添加一致性可能会增加二进制文件的大小,这可能会减慢启动时间。或者它可能是微不足道的,因为二进制大小与启动时间不太相关(因为文件是内存映射的)。或者您可能指的是编译时性能,其中明确添加自动生成的一致性显然需要一些额外的编译器工作,并且在某些情况下可能会增加类型检查器需要遍历的类型海洋,从而稍微减慢速度。

但对于日常工作,很难想象添加不必要的Encodable一致性会导致表视图滞后的情况,如果这就是您所说的性能。你的“另一个程序员可能会误解”的考虑要重要得多。