Я пытаюсь получить последнюю фотографию из рулона камеры iphone. Я использую следующий код:Проблемы с памятью при чтении рулона камеры iphone с AlAssetsLibrary
UIImage* __block image = [[UIImage alloc] init];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup* group, BOOL* stop) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
if ([group numberOfAssets] > 0) {
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:[group numberOfAssets]-1] options:NSEnumerationConcurrent usingBlock:^(ALAsset* alAsset, NSUInteger index, BOOL* innerStop) {
if (alAsset) {
ALAssetRepresentation* rawImage = [alAsset defaultRepresentation];
image = [UIImage imageWithCGImage:[rawImage fullScreenImage]];
[self doTheJobWithImage:image];
// Inside doTheJobWithImage: a segue is also performed at the end
}
}];
}
} failureBlock:^(NSError* error) {
NSLog(@"Error: %@", [error localizedDescription]);
}];
Он работает, но с недостатками (я использую инструменты и зомби для его отладки):
- Она читает каждое изображение внутри камеры ролл. Итак, первый вопрос: не перечисляетAssetsAtIndexes: извлекают только указанные изображения (atIndexes)? Что случилось с моим кодом?
- Добавление к предыдущей проблеме, память становится проблемой, когда много фотографий в рулоне камеры. Мое приложение вылетает, если слишком много, или, если оно работает, кажется, что полученные изображения НИКОГДА не освобождаются, поэтому второй или третий раз я вызываю этот код, он все равно падает из-за утечек памяти. Итак, второй вопрос: как заставить мой код освобождать все после вызова doTheJobWithImage:?
Я использую xcode 4.6, ios 6 и ARC. Заранее спасибо.