gpt4 book ai didi

ios - Swift 静态数组 - 正在释放的指针未分配

转载 作者:行者123 更新时间:2023-11-28 13:42:54 25 4
gpt4 key购买 nike

我在 ServiceRequest 类中有一个静态数组 metricsTransactionData。我连续调用多个请求,有时我会在该行 ServiceRequest.metricsTransactionData.append(samp) 上收到此错误“对象 0x10b874cb0 错误:未分配正在释放的指针”。请帮忙

public func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {
for mem in metrics.transactionMetrics {
var samp = MetricsData()
samp.requestDate = mem.requestStartDate
samp.responseDate = mem.responseEndDate
samp.url = mem.request.url?.absoluteString
ServiceRequest.metricsTransactionData.append(samp)
}
}

堆栈跟踪:

* thread #3, queue = 'NSOperationQueue 0x6000001edb20 (QOS: UNSPECIFIED)', stop reason = signal SIGABRT
frame #0: 0x0000000106897b66 libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x00000001068d1080 libsystem_pthread.dylib`pthread_kill + 333
frame #2: 0x0000000106644c45 libsystem_c.dylib`abort + 127
frame #3: 0x00000001067986e4 libsystem_malloc.dylib`malloc_vreport + 545
frame #4: 0x00000001067988d5 libsystem_malloc.dylib`malloc_report + 152
frame #5: 0x00000001049bd910 libswiftCore.dylib`_swift_release_dealloc + 16
frame #6: 0x0000000104980017 libswiftCore.dylib`assignWithTake value witness for Swift.Array + 23
frame #7: 0x00000001046f3a5a libswiftCore.dylib`(extension in Swift):Swift._ArrayBufferProtocol._arrayOutOfPlaceUpdate<A where A1: Swift._PointerFunction, A.Element == A1.Element>(inout Swift._ContiguousArrayBuffer<A.Element>, Swift.Int, Swift.Int, A1) -> () + 1146
frame #8: 0x000000010470aa11 libswiftCore.dylib`Swift.Array._copyToNewBuffer(oldCount: Swift.Int) -> () + 209
frame #9: 0x000000010470aaf0 libswiftCore.dylib`Swift.Array._makeUniqueAndReserveCapacityIfNotUnique() -> () + 192
frame #10: 0x000000010470ad98 libswiftCore.dylib`Swift.Array.append(A) -> () + 24

最佳答案

该错误告诉您使用将从各种后台任务更新的静态/全局数组是一个非常糟糕的主意。 Swift 数组不是线程安全的。

意味着你的数组被一个任务调整大小,而另一个任务可能已经在做同样的事情,导致内存访问错误。如果您真的必须这样做,可能(至少)在 DispatchQueue.main.async 中调用 append 会解决问题,但如果您想维持顺序,则需要自己处理同步。

但无论如何,我强烈建议您找到另一种解决方案,以防止直接对数组进行这种写访问。全局可写数组不好。

关于ios - Swift 静态数组 - 正在释放的指针未分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55810476/

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