PHImageManager se bloquea después de muchas requestes de imágenes

Estoy tratando de tomar todos los usuarios PHAsset con PHAssetMediaTypeImage y luego iterar a través de ellos, obteniendo los UIImages correspondientes uno a la vez. Tengo alnetworkingedor de 2k fotos en mi iPhone 5 y este código se bloquea después de iterar a través de 587 de ellos.

 PHFetchResult *fr = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil]; PHImageManager *manager = [PHImageManager defaultManager]; PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.synchronous = YES; __block int i = 0; for (PHAsset *result in fr) { [manager requestImageForAsset:result targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *image, NSDictionary *info) { NSLog(@"%d", i); i++; }]; } 

La exception lee EXC_BAD_ACCESS (código = 1, dirección = 0x0). Cualquier ayuda que me indique en la dirección correcta será enormemente apreciada.

Cerrando el ciclo en este. Las imágenes no se liberan hasta que se completa el bucle for, por lo que debe poner un @autoreleasepool para drenar el grupo después de cada iteración del bucle, al igual que

 PHFetchResult *fr = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil]; PHImageManager *manager = [PHImageManager defaultManager]; PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.synchronous = YES; __block int i = 0; for (PHAsset *result in fr) { @autoreleasepool { [manager requestImageForAsset:result targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *image, NSDictionary *info) { NSLog(@"%d", i); i++; }]; } } 

El problema para mí fue encontrado en esta línea de código

  PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFill, options: nil, resultHandler: {(result, info) in cell.setThumbnailImage(result) }) 

El parámetro, targetSize se pasó el valor de PHImageManagerMaximumSize que fue el culpable. Lo cambié a lCgSize , lCgSize = CGSizeMake(105, 105); Resuelto el problema.

Según la documentation PHImageManagerMaximumSize

Cuando utiliza la opción PHImageManagerMaximumSize, Photos proporciona la image más grande disponible para el activo sin escala ni recorte. (Es decir, ignora la opción resizeMode).

Entonces, esto explica el problema. Creo que si se tratara de una sola image, no debería ser un problema, pero si hubiera muchas imágenes, el dispositivo se quedaría sin memory.