Chargement de l'image avec avertissement de memory GCD

Je développe une application de galerie de photos en utilisant AssetsLibrary pour charger les photos de mon appareil. Lors de la présentation d'une image random dans un autre VC, j'ai remarqué ce qui suit: il faut environ 1 ou 2 secondes pour que mon image en pleine résolution se charge sur imageView (beaucoup plus longtime que l'application photos native) et je reçois aussi le journal avertissement de memory "après avoir chargé quelques images. Si je définis ma représentation sur fullScreenImage, les avertissements s'arrêtent mais je ne le veux pas. Que dois-je changer pour une performance fluide et des images de haute qualité sur la vue?

Voici le code, j'espère que vous pourrez me dire quel est le problème:

C'est le VC où je veux présenter mon image sur l'écran

- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@",assetsController); detailImageView = [[UIImageView alloc]initWithFrame:self.view.bounds]; [self.view addSubview:detailImageView]; detailImageView.image = smallImage; //small image is my asset thumbnail and is passed as an argument in my init function dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ALAsset *asset = [assetsController.albumPics objectAtIndex:assetsController.index]; ALAssetRepresentation *representation = [asset defaultRepresentation]; bigImage = [[UIImage imageWithCGImage:[representation fullResolutionImage]]retain]; dispatch_async(dispatch_get_main_queue(), ^{ detailImageView.image = bigImage; }); [pool release]; }); } 

MISE À JOUR 1

  { UIImageView *detailImageView = [[UIImageView alloc]initWithFrame:self.view.bounds]; [self.view addSubview:detailImageView]; detailImageView.image = smallImage; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ALAsset *asset = [assetsController.albumPics objectAtIndex:assetsController.index]; ALAssetRepresentation *representation = [asset defaultRepresentation]; UIImage *bigImage = [UIImage imageWithCGImage:[representation fullResolutionImage]]; dispatch_async(dispatch_get_main_queue(), ^{ detailImageView.image = bigImage; }); [pool release]; }); } 

entrez la description de l'image ici

bigImage est une variable d'instance? Est-il utilisé dans un autre endroit qu'ici? S'il n'est utilisé nulle part ailleurs, il devrait s'agir d'une variable locale, et vous ne devriez pas la conserver. S'il s'agit d'une variable d'instance que vous conservez, vous devez libérer la valeur précédente avant de lui atsortingbuer une nouvelle valeur.

La même discussion s'applique à detailImageView