String.init(cString:UnsafePointer )是否复制内存内容?

问题描述 投票:0回答:1

内部工作原理是什么?

是否创建C字符串数据的Swift字符串副本?

它是否将其用作参考并以Swift字符串形式返回,因此返回的字符串使用相同的数据?如何运作?

是否将C字符串复制到新分配的Swift字符串中?

如果String(cString: UnsafePointer<Int8>)确实可以通过将C字符串复制到新分配的swift字符串中而起作用,是否有一种方法可以通过引用现有数据而不是复制它来将C字符串转换为swift?

String(cString: UnsafePointer<Int8>)的工作原理,以及如何确定它是否复制或是否引用与Swift字符串相同的内存?

swift string pointers memory
1个回答
0
投票

初始化器

init(cString:)

通过复制由给定指针引用的以空终止的UTF-8数据来创建新字符串。


是否有一种方法可以通过引用现有数据而不是复制数据来将C字符串转换为swift?
不。字符串经常被复制/销毁,这涉及对基础缓冲区执行保留/释放操作,以对引用计数进行必要的保留。如果内存不是字符串所有的,则无法可靠地取消分配它。

您试图通过避免复制来实现什么?

© www.soinside.com 2019 - 2024. All rights reserved.