- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 Swift 2 中,三种数组变体之间的主要区别是什么:
谁能用真实世界的例子解释一下?
最佳答案
来自docs :
连续数组:
Efficiency is equivalent to that of Array, unless T is a class or @objc protocol type, in which case using ContiguousArray may be more efficient. Note, however, that ContiguousArray does not bridge to Objective-C. See Array, with which ContiguousArray shares most properties, for more detail.
基本上,无论何时在数组中存储类 或@objc 协议(protocol) 类型,您都可能需要考虑使用ContiguousArray
而不是数组
。
数组切片
ArraySlice always uses contiguous storage and does not bridge to Objective-C.
Warning: Long-term storage of ArraySlice instances is discouraged
Because a ArraySlice presents a view onto the storage of some larger array even after the original array's lifetime ends, storing the slice may prolong the lifetime of elements that are no longer accessible, which can manifest as apparent memory and object leakage. To prevent this effect, use ArraySlice only for transient computation.
当您想从数组中获取子范围时,大多数时候都会使用 ArraySlices,例如:
let numbers = [1, 2, 3, 4]
let slice = numbers[Range<Int>(start: 0, end: 2)] //[1, 2]
任何其他情况你应该使用Array
。
关于arrays - Swift 中的 Array<T>、ContiguousArray<T> 和 ArraySlice<T> 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31290576/
为什么直接在 ArraySlice 上调用变异方法不会触发写时复制?唯一的区别是将切片分配给变量,对吗? 我的示例代码: var numbers = [15, 40, 10, 30, 60, 25,
我有一个 ArraySlice>里面只有一本字典。这看起来像下面这样: [["high": "4", "investpercent": "6.0", "objective": "2.0", "savi
说... 你有大约 20 件事 很多时候,您会在一个包含 1000 个项目的循环中进行复杂的计算。最终结果是每次大约 20 个不同的数字 在运行整个循环之前,您不知道会有多少 然后您想要快速(当然是优
我有以下格式的数据 ["DATA1-1","DATA1-2","DATA1-3","DATA1-4","","DATA2-1","DATA2-2","DATA2-3","DATA2-4","","DA
var absences = [0, 2, 0, 4, 0, 3, 1, 0] let midpoint = absences.count / 2 var firstHalf = absences.p
var absences = [0, 2, 0, 4, 0, 3, 1, 0] let midpoint = absences.count / 2 var firstHalf = absences.p
我不明白为什么我会在循环的第二次迭代中遇到错误。你能帮我了解问题出在哪里吗? let NumTracks = 3 let TrackBytes = 2 func readBytes(input: [U
我已经阅读了多篇关于 ArraySlice 如何在 `Swift 中使用 Array 的帖子和文章。 但是,我找不到的是它在内部是如何工作的? ArraySlice are Views on Arra
我正在尝试确定创建我自己的连续内存容器的“Swift-y”方式(在我的特定情况下,我正在构建 n 维数组)。我希望我的容器在功能和可用性方面尽可能接近 Swift 的内置数组。 我需要访问指向我的容器
这个问题在这里已经有了答案: In Swift, Array [String] slicing return type doesn't seem to be [String] (6 个答案) 关闭
下面我试图获取 ArraySlice draggignFan 的第 i 个元素。代码构建良好(没有警告)但程序在运行时死于我尝试像普通数组一样索引切片的行: var draggingFan : Arr
以下函数在 Int 数组中查找给定项的第二个索引: func secondIndexOf(item: Int, inArray array: Array) -> Int? { if let f
我有一些非常大的数组,我必须对其执行数百万次计算。在 Objective-C 中,数组将存储为 NSData,我将它们抽象为 C 数组以在(求和、加等)上使用 Accelerate 函数。然而,(考虑
我从下面的代码中得到错误 if(currentArgument == "") { numberOfArgInCurrentFunction -= 1 var lastExp
我有一个包含 Int 值的数组。在这个数组中,我需要获得最高值。直到这里我都没有问题。但现在我需要将此值转换为 CGFloat。 let ordersPerHour = [hour0All, hour
这与问题 here 有关,但答案只显示了如何使该实例工作,但没有解释哪里出了问题,所以我不确定如何使我的工作正常。以下是有问题的代码: let texts = ["abcdeb", "abbd", "
在这段代码中 protocol MyProtocol {} extension Int: MyProtocol {} let a: Array = Array() let b: ArraySlice
我有以下 Swift 代码: extension Array { typealias EqualTest = (Iterator.Element, Iterator.Element) -> Boo
我想做的是通过编写如下函数来解析(部分)二进制协议(protocol) (MQTT): func readString(bytes: Array OR ArraySlice) -> (string:
我想通过使用 prefix , postfix 将模型数组分为两个不同的数组 let data = serverResponse.data as! [User] collectionData = da
我是一名优秀的程序员,十分优秀!