У меня есть довольно большой объект NSData (или NSMutableData, если необходимо), из которого я хочу извлечь небольшой кусок и оставить остальные.Поскольку я работаю с большим количеством байтов NSData, я не хочу делать большую копию, а просто усекаю существующие байты.В основном:
- NSData * источник: <несколько байтов, которые я хочу отбросить> + <большой кусок байтов, которые я хочу сохранить>
- NSData * место назначения: <большой кусок байтовЯ хочу сохранить>
В NSMutableData есть методы усечения, но они только обрезают его конец, тогда как я хочу усекать начало.Я думаю, что сделать это с помощью методов:
Обратите внимание, что я использовал неправильный (копирование) метод в оригинальной публикации.Я отредактировал и исправил это
- (const void *)bytes
и
- initWithBytesNoCopy:length:freeWhenDone:
Однако я пытаюсь выяснить, как управлять памятью с этим.Я предполагаю, что процесс будет таким (я разместил там, где я не знаю, что делать):
// Get bytes
const unsigned char *bytes = (const unsigned char *)[source bytes];
// Offset the start
bytes += myStart;
// Somehow (m)alloc the memory which will be freed up in the following step
?????
// Release the source, now that I've allocated the bytes
[source release];
// Create a new data, recycling the bytes so they don't have to be copied
NSData destination = [[NSData alloc]
initWithBytesNoCopy:bytes
length:myLength
freeWhenDone:YES];
Спасибо за помощь!