Ответ 1
Следующий фрагмент кода выполняет фрагментацию без копирования данных:
NSData* myBlob;
NSUInteger length = [myBlob length];
NSUInteger chunkSize = 100 * 1024;
NSUInteger offset = 0;
do {
NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[myBlob bytes] + offset
length:thisChunkSize
freeWhenDone:NO];
offset += thisChunkSize;
// do something with chunk
} while (offset < length);
Sidenote: я должен добавить, что объекты chunk нельзя безопасно использовать после того, как myBlob
был выпущен (или иным образом изменен). chunk
фрагменты указывают на память, принадлежащую myBlob
, поэтому не сохраняйте их, если вы не сохраните myBlob
.