Полагаю, это приложение для iOS.В этом случае вы, вероятно, достигнете предела памяти, вызвав contentsOfFile:
, потому что этот метод пытается прочитать все содержимое файла в переменную (память).Помните, что на iOS ваше приложение должно играть хорошо, и если оно решит использовать слишком много памяти, процесс сторожевого таймера убьет ваше приложение, чтобы спасти устройство от перезагрузки (что происходит из-за того, что на устройствах iOS нет диска для подкачки).
Вы смотрели на NSFileHandle
?NSFileHandle
поддерживает поиск в текстовом файле.С помощью простой итерации вы можете использовать следующие методы для поиска в файле и чтения фрагментов данных:
- (NSData *)readDataOfLength:(NSUInteger)length;
- (void)seekToFileOffset:(unsigned long long)offset;
Это может выглядеть примерно так.Предположим, pathToFile
- это NSString
, содержащий путь к текстовому файлу, который нужно прочитать.
uint64 offset = 0;
uint32 chunkSize = 1024; //Read 1KB chunks.
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:pathToFile];
NSData *data = [handle readDataOfLength:chunkSize];
while ([data length] > 0)
{
//Make sure for the next line you choose the appropriate string encoding.
NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
/* PERFORM STRING PROCESSING HERE */
/* END STRING PROCESSING */
offset += [data length];
[handle seekToFileOffset:offset];
data = [handle readDataOfLength:chunkSize];
}
[handle closeFile];