GCDAsyncSocket - 如何写入可变数据?

GCDAsyncSocket - how do I write mutable data?

GCDAsyncSocket 的文档说,在将可能更改的可变数据传递给写入函数之前,应该先复制这些数据。

在下面的代码中:

func send(buffer: NSMutableData) {
    let bufferCopy = NSData(data: buffer)
    socket.writeData(bufferCopy, withTimeout: -1, tag: 0)
}
  1. 调用NSData是复制缓冲区的正确方法吗?
  2. bufferCopy会保留在内存中直到writeData(即async)完成,还是在本地发送,并在函数退出时销毁?

1.调用 NSData 是复制缓冲区的正确方法吗?

是,它将字节复制到新的数据对象

2。 bufferCopy 是否会保留在内存中直到 writeData(异步)完成,还是在本地发送,并在函数退出时销毁?

是的,它将保留到 writeData 完成。此外,一旦您从函数发送 return,它就会被释放,因为如果 writeData 是同步的,则没有任何其他来自外部的强引用。如果 WriteData 是异步调用,一旦调用完成,数据将被释放,因为不会有任何强引用,因为控制将来自发送和 WriteData 异步调用。因此,如果此调用是异步的,则意味着该调用需要具有对 bufferCopy 的强引用。