String(cString:UnsafePointer )在Swift中的工作原理如何?

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

内部有什么作用?它会创建C字符串数据的Swift字符串副本吗?它是否将其用作参考并将其作为Swift字符串返回,所以返回的字符串使用相同的数据?它是如何工作的?是否将C字符串复制到新分配的Swift字符串中?如果String(cString: UnsafePointer<Int8>)通过将C字符串复制到新分配的swift字符串中而确实起作用,是否有办法通过引用已经存在的数据而不是复制它来将C字符串转换为swift? String(cString: UnsafePointer<Int8>)如何工作,如何确定它是否复制或是否引用与Swift字符串相同的内存?

c swift string pointers memory
1个回答
0
投票

documentation明确指出已复制数据:

初始化器

init(cString:)

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


是否有一种方法可以通过引用现有数据而不是复制数据来将C字符串转换为swift?

不。字符串经常被复制/销毁,这涉及对基础缓冲区执行保留/释放操作,以对引用计数进行必要的保留。如果内存不是字符串所有的,则无法可靠地取消分配它。

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

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