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)
}
- 调用
NSData
是复制缓冲区的正确方法吗?
bufferCopy
会保留在内存中直到writeData
(即async
)完成,还是在本地发送,并在函数退出时销毁?
1.调用 NSData 是复制缓冲区的正确方法吗?
是,它将字节复制到新的数据对象
2。 bufferCopy 是否会保留在内存中直到 writeData(异步)完成,还是在本地发送,并在函数退出时销毁?
是的,它将保留到 writeData 完成。此外,一旦您从函数发送 return,它就会被释放,因为如果 writeData 是同步的,则没有任何其他来自外部的强引用。如果 WriteData 是异步调用,一旦调用完成,数据将被释放,因为不会有任何强引用,因为控制将来自发送和 WriteData 异步调用。因此,如果此调用是异步的,则意味着该调用需要具有对 bufferCopy 的强引用。
GCDAsyncSocket
的文档说,在将可能更改的可变数据传递给写入函数之前,应该先复制这些数据。
在下面的代码中:
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 完成。此外,一旦您从函数发送 return,它就会被释放,因为如果 writeData 是同步的,则没有任何其他来自外部的强引用。如果 WriteData 是异步调用,一旦调用完成,数据将被释放,因为不会有任何强引用,因为控制将来自发送和 WriteData 异步调用。因此,如果此调用是异步的,则意味着该调用需要具有对 bufferCopy 的强引用。