GCDAsyncSocket的文档说,可能会更改的可变数据应先复制,然后再传递给write函数。

在下面的代码中:

func send(buffer: NSMutableData) {
    let bufferCopy = NSData(data: buffer)
    socket.writeData(bufferCopy, withTimeout: -1, tag: 0)
}



NSData的调用是否是复制缓冲区的正确方法?
bufferCopy是否会保留在内存中,直到writeData(即async)完成,或者它是本地发送的,并在函数退出时销毁?

最佳答案

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

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

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

是的,它将一直保留到writeData完成。同样,一旦您从send函数返回,它将被释放,因为writeData是同步的,则没有其他任何强大的外部引用。如果WriteData是一个异步调用,则在调用完成后,将释放数据,因为不会有任何强烈的引用,因为发送和WriteData异步调用都将获得控制权。因此,如果此调用是异步的,则意味着该调用需要具有对bufferCopy的强引用。

关于ios - GCDAsyncSocket-如何写入可变数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36612768/

10-10 16:07