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/