I can add bytes to a NSMutableData instance easily by using the appendData method, however I do not see any similar method for removing data? Am I overlooking something, or do I need to create a new object and copy over only the bytes I need?
I can add bytes to a NSMutableData instance easily by using the appendData method,
Share
Please see the documentation of the following method:
Apple says the following:
To remove 10 byte from the end, use:
It could also be done via
replaceBytesInRange, but it’s in fact much faster, because the bytes are not really removed. Instead only the internal size variable is changed andNSMutableDatawill behave as if the bytes were removed. IOW, this is a O(1) operation (that means it will always take equally long to perform, regardless of how many bytes you remove), and it is very fast.To remove 10 byte from front, use:
To remove 10 bytes in the middle (e.g. after 20 bytes), use:
replaceBytesInRangeis a O(n) operation, though. The time required to perform the operation depends on how many bytes the data object has and where you remove them, as all bytes right to the remove location must be shifted to the left. It is still pretty fast and only limited by the throughput of your computer’s memory (RAM). If you have 10 MB of data and you remove 1 MB from front, 9 MB are copied to fill the gap of the just removed MB. So the speed of the operation depends on how fast your system can move 9 MB of RAM from one address to another one (which on my system takes 0.2 milliseconds for 9 MB).