swift4 为什么要整一个SubString

作者: kevinLY | 来源:发表于2017-09-24 02:40 被阅读382次

swift4的众多变化之中,String和之前有一些很大的改进

String的哪些改进

一、String又变成了一个Collection:

看一个String的源码方法 的注释:
public func prefix(_ maxLength: Int) -> Substring

prefix方法源码.png

可以拥有和 Array 等 Collection 一样的操作方式。

import UIKit

let text = "12345"

for char in text {
    print(char)
}

let str1 = text.prefix(2) // "12"
print(type(of: str1)) //Substring
print(String(str1))

let str2 = text.prefix(10) //"12345"
print(String(str2))

let str3 =  String(str1)
print(str3) //"12"
playgroundDemo.png

注意:但是我们注意到text.prefix方法的返回值并非是String类型,而是SubString类型,那么就引入本文的主题

swift4 为什么整一个SubString呢

答案是:性能优化

原理图.png

1、“12345”和“12”分别是两个不同的storage;
2、text、str1、str2分别的对“12345” storage的引用,但是text和str1、str2分别是String和SubString类型;
3、str3 当显示的将SubString 转化为String的时候,会copy一份新的内存空间;

从这三点中可以体会到SubString的优缺点:

一、Swift 4 的 String 相关的操作可以获取比较高的性能:

当我们用一些 Collection 的方式得到 String 的 Slice(一部分)的时候,这时候创建的都是 Substring,Substring 与 String 共享一个 Storage,这意味我们在操作 String 的一部分的时候,是不需要频繁的去创建内存的,这使得 Swift 4 的 String 相关的操作可以获取比较高的性能。

二、 可能会会导致不必要的内存占用:

当SubString存在的时候String也不会被释放,就会有一种情况当String很大,而SubString只是很小的一部分的时候,就会导致不必要的内存占用。

相关文章

网友评论

    本文标题:swift4 为什么要整一个SubString

    本文链接:https://www.haomeiwen.com/subject/zeghextx.html