This may be an easy one. I'm using GCDAsyncSocket to receive a variable amount of bytes representing discrete data chunks from a server which appear in a NSMutableData object.
If the data were words it might look like this:
ChunkChunkChunkChu
nkChunkChunkChunkCh
So after processing three chunks, a partial chunk "Chu" remains and has to be retained so that the next lot of data can compete that chunk.
Right now the processing flow looks like this:
receive data, appending to myBuffer
process contents of buffer up to last complete chunk
create new myBuffer with partial fragment of remaining data chunk at end of buffer
back to the start
This works well but I'm not sure if it is the most efficient way. I see that NSMutableData has a replaceBytesInRange that I could use to remove a count of processed bytes from the buffer's start but it is reportedly a slow operation.
Any suggestions on the best way to do this? If it makes a difference I am using ARC so I expect the overhead of creating/freeing is reduced.