У меня есть супер базовый AVCaptureSession, настроенный с AVCaptureVideoDataOutput и AVCaptureStillImageOutput. AVCaptureVideoDataOutput не имеет делегата буфера. Ничего особенного не происходит, просто устанавливается стандартная проблема AVCaptureSession. Если я просто скомпилирую приложение и оставлю его там на 10 минут, доступная память будет уменьшаться примерно на 1 Мб каждую минуту или около того. Я запустил приложение с 72 МБ свободного места, и, просто оставив его на своем столе, увидел, что объем свободной памяти уменьшился до 33 МБ.
Если я закомментирую часть, в которой я добавлю AVCaptureVideoDataOutput к сеансу, доступная память останется около 70-72 МБ.
Поэтому я установил кнопку для удаления AVCaptureVideoDataOutput из сеанса, и после нажатия кнопки доступная память сразу же возвращается к тому моменту, когда приложение запускалось впервые (~ 72 МБ). Кто-нибудь еще видел это и знает об обходном пути? У меня iOS 5.0 на моем iPhone и последняя бета-версия SDK.
Редактировать: вот код, который добавляет AVCAptureVideoDataOutput:
...
NSNumber *rgbNum = [NSNumber numberWithInt:kCVPixelFormatType_32BGRA];
NSDictionary *videoSettings = [NSDictionary dictionaryWithObject:rgbNum forKey:(id)kCVPixelBufferPixelFormatTypeKey];
dataOutput = [AVCaptureVideoDataOutput new];
[dataOutput setAlwaysDiscardsLateVideoFrames:YES];
[dataOutput setVideoSettings:videoSettings];
_videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", NULL);
[dataOutput setSampleBufferDelegate:self queue:_videoDataOutputQueue];
dispatch_release(_videoDataOutputQueue);
if ([session canAddOutput:dataOutput]) {
[session addOutput:dataOutput];
} else {
NSLog(@"couldn't add av data output");
}
...
Комментирование делегата буфера, похоже, не имеет значения.
Только что попробовал это снова, и оно ушло с ~ 70 Мб свободного до ~ 54 Мб свободного в течение 6 минут. (