Ответ 1
Если вам нужен произвольный доступ к содержимому файла способом, похожим на загрузку его через NSData, но без фактического чтения всего в памяти, вы можете использовать сопоставление памяти. Это означает, что файл на диске рассматривается как раздел виртуальной памяти и будет выгружаться в него так же, как обычная виртуальная память.
NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
options: NSMappedRead
error: &error];
Если вам не нужны данные об ошибках файловой системы, вы можете просто использовать:
NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];
Затем вы просто будете использовать метод NSData -getBytes:range:
для вывода определенных фрагментов данных, и только соответствующие части файла будут фактически считаны из постоянного хранилища; они также будут иметь право на выгрузку.