Мне нужно прочитать несколько десятков файлов и выполнить простую обработку их содержимого. Каждый файл в отдельности не вызовет проблем, но загрузка всех данных за один раз быстро исчерпает мою память.
Я начал с:
for (NSString *filename in filenames)
do_something([NSData dataWithContentsOfFile:filename]);
Тогда, конечно, я вспомнил, что Objective-C на iPhone на самом деле не является сборщиком мусора, и они все равно будут держаться до конца кадра. Хорошо:
for (NSString *filename in filenames) {
NSData *d = [[NSData alloc] initWithContentsOfFile:filename];
do_something(d);
[d release];
}
Номинально он использует столько же памяти, сколько и самый большой файл, но это только при условии, что распределитель играет в данный момент дружелюбно - он также может разбивать и фрагментировать все.
Есть ли какой-нибудь способ, которым я могу создать NSMutableData и продолжать использовать этот буфер данных, увеличивая его по мере необходимости? Мне нужно это как NSData для других сторонних API. Лучшая идея, которая у меня есть на данный момент, - это неправильное / повторное использование буфера char * во время чтения, например, с помощью stdio и создание NSDatas с помощью freeWhenDone: NO при поддержке; таким образом я только беру / сохраняю небольшое количество за файл.