Ios Swift静态数组-未分配要释放的指针

Ios Swift静态数组-未分配要释放的指针,ios,swift,Ios,Swift,我在ServiceRequest类中有一个静态数组metricsTransactionData。我正在连续调用多个请求,有时在这一行ServiceRequest.metricsTransactionData.append(samp)上出现错误“对象0x10b874cb0的错误:未分配被释放的指针”。请帮忙 public func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics:

我在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
*线程#3,队列='NSOperationQueue 0x6000001edb20(QOS:未指定)',停止原因=信号SIGABRT
帧0:0x0000000106897b66 libsystem\u kernel.dylib`\u pthread\u kill+10
帧#1:0x00000001068d1080 libsystem_pthread.dylib`pthread_kill+333
帧#2:0x0000000106644c45 libsystem_c.dylib`abort+127
帧#3:0x00000001067986e4 libsystem_malloc.dylib`malloc_vreport+545
第4帧:0x00000001067988d5 libsystem_malloc.dylib`malloc_report+152
帧#5:0x00000001049bd910 libswiftCore.dylib`\u swift\u release\u dealloc+16
帧#6:0x0000000104980017 libswiftCore.dylib`assignWithTake值见证用于Swift.Array+23
帧#7:0x00000001046f3a5a libswiftCore.dylib`(Swift中的扩展名):Swift.\u ArrayBufferProtocol.\u arrayOutOfPlaceUpdate(inout Swift.\u contiguraybuffer,Swift.Int,Swift.Int,A1)->+1146
帧#8:0x000000010470aa11 libswiftCore.dylib`Swift.Array._copyToNewBuffer(oldCount:Swift.Int)->()+209
帧#9:0x000000010470aaf0 libswiftCore.dylib`Swift.Array._makeuniqueandservecapacityifnotunique()->()+192
帧#10:0x000000010470ad98 libswiftCore.dylib`Swift.Array.append(A)->()+24

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

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


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

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

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


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

发生错误时堆栈的外观如何?使用trace更新错误时堆栈的外观如何?使用trace更新