gpt4 book ai didi

swift - 为什么我的 Swift 3 编码跑掉了?

转载 作者:行者123 更新时间:2023-11-30 12:30:38 25 4
gpt4 key购买 nike

我有一个 Swift 类,它有一些“var”,它们是原始整数值,还有一些是原始整数值数组,或者像 CMTime 这样的结构数组。当我对对象执行 NSKeyedArchiver.archiveRootObject 时,如果我将编码限制为整数值、[CMTime] 和最小的整数数组,则一切正常。 (我可以编码,然后解码,并验证内容的相等性。)令人费解的是,对调试器理解的 [UInt16] 进行编码,其成员数量少于 100M,导致编码期间应用程序的内存分配增加到 4Gb,然后是 8Gb,然后是 12Gb(我点击了 STOP)。我使用 coder.encode(aSwiftArray, forKey:"aKey") 时是否存在一些问题,有时它可以工作,但其他时候则不行?

typealias WordSize = UInt16
class PixelHistogram :NSObject, NSCoding {
var pixelCount:Int = 0
var timeAtFrame: [CMTime] = [] // CMTime for each frame
var pixelVsDelta: [UInt] = [] // 256x256 histogram of pixel vs DeltaPixel
var histPixel:[WordSize] = [] // histogram of Y at each pixel [pixelCount][256]
}
// Initializing the various arrays...
histPixel = [WordSize](repeating: 0, count: 256*pixelCount)
pixelVsDelta = [UInt](repeating: 0, count: 256*256)

required convenience init?(coder aDecoder:NSCoder){
self.init()
timeAtFrame = aDecoder.decodeObject(forKey:Slot.timeAtFrame.rawValue ) as! [CMTime]
pixelVsDelta = aDecoder.decodeObject(forKey:Slot.pixelVsDelta.rawValue) as! [UInt]
func encode(with coder:NSCoder)
coder.encode(timeAtFrame, forKey: Slot.timeAtFrame.rawValue)
coder.encode(pixelVsDelta, forKey: Slot.pixelVsDelta.rawValue)
}

最佳答案

编码 histPixel 时内存失控的一个可能答案是,encodeObject 将数组中的每个 UInt16 值转换为 NSNumber。我假设编码只是在幕后使用encodeBytes。

关于swift - 为什么我的 Swift 3 编码跑掉了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43601232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com