什么是Swift字符串到NSString的桥接开销



我已经开始学习Swift了。我读到,Swift字符串在使用Cocoa类时被桥接到NSString。这个操作的开销是多少?

来自iOS开发者库

Swift会自动桥接String类型和NSString类。

从Swift源->stdlib/public/core/String.Swift

String作为NSString桥接到Objective-C,并且String源于Objective-C的可能将其字符存储在NSString。由于NSString的任意子类都可以如果成为String,则无法保证代表性或在这种情况下效率。由于NSString是不可变的,因此它是就像某个副本共享了存储一样:第一个是任何一系列的变异操作都会导致元素被复制转换为唯一的连续存储,这可能会花费O(N)时间,并且空间,其中N是字符串表示的长度(或如果基础NSString具有异常性能特性)。

这些是我从该段得出的结论。注意:NSString是不可变的,我不确定NSMutableString是如何工作的,这可能与您的具体情况有关。

  1. NSString桥接到String本质上是自由操作;不需要转换。O(1)
    • NSString使用UTF-16作为后备存储器。String使用UTF-16或ASCII,因此两个实例可以使用相同的内存
  2. 但是,如果随后对String结构进行突变,则需要从原始NSString复制所有内存。O(N)
    • String不能在不修改NSString的存储器的情况下修改其后备存储器。这就是为什么必须复制内存,以便String拥有自己的内存

swift使用的支持StringCore的源代码。

相关内容

  • 没有找到相关文章

最新更新