swift4的众多变化之中,String和之前有一些很大的改进
String的哪些改进
一、String又变成了一个Collection:
看一个String的源码方法 的注释:
public func prefix(_ maxLength: Int) -> Substring

可以拥有和 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"

注意:但是我们注意到text.prefix方法的返回值并非是String类型,而是SubString类型,那么就引入本文的主题
swift4 为什么整一个SubString呢
答案是:性能优化

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只是很小的一部分的时候,就会导致不必要的内存占用。
网友评论