SavingAccount
的文档说可能更改的可变数据应该在传递给write函数之前复制。
在以下代码中:
GCDAsyncSocket
func send(buffer: NSMutableData) {
let bufferCopy = NSData(data: buffer)
socket.writeData(bufferCopy, withTimeout: -1, tag: 0)
}
是否正确复制缓冲区?NSData
保留在内存中,直到bufferCopy
(writeData
)完成,或者它是本地发送,并在函数退出时销毁?答案 0 :(得分:1)
1。调用NSData是否是复制缓冲区的正确方法?
是的,它会将字节复制到新的数据对象
2。 bufferCopy将保留在内存中,直到writeData(异步)完成,或者它是本地发送,并在函数退出时被销毁?
是的,它将在writeData完成之前保留。一旦从函数send返回,它将被释放,因为如果writeData是同步的,那么从外部没有任何其他强引用。如果WriteData是一个异步调用,一旦调用完成,数据将被释放,因为不会有任何强有力的引用,因为控制将来自send和WriteData异步调用。因此,如果此调用是异步的,则意味着调用需要具有对bufferCopy的强引用。