2017-06-20 10 views
0

Je crée une application de diaporama photo. Mon flux d'application: utilisateur select actifs photo> (sur 100+) images de charge des actifs> (affichage taille de l'image) jeu image imageView ou ajouter CIFilter à l'image et diapositivesCIImage avec la mémoire CGImage grandir

Question: Lorsque je crée CIImage objet de CGImage, la mémoire grandit si vite et si l'image compte plus de 100+, l'application plantage. Mais il est étrange que je supprime le code de création, l'application fonctionne bien.

Quelqu'un peut-il m'aider?

plus de code:

- (void)loadDisplayImagesWithCompletion:(void (^)(NSArray *images))completion { 
    dispatch_async(dispatch_queue_create("PhotosEditViewController_loadImageQueue", nil), ^{ 

     __block NSMutableArray *images = [NSMutableArray array]; 
     __block int handleCount = 0; 
     __weak PhotosEditViewController *weakSelf = self; 

     for (PHAsset *asset in self.photoAssets) { 
      [KPPhotoManager requestImageForAsset:asset targetSize:self.contentView.frame.size completeBlock:^(UIImage *image) { 

       [images addObject:image]; 

       @autoreleasepool { 
        CIImage *ciImage = [CIImage imageWithCGImage:[image CGImage]];//memory growing up 
       } 
      }]; 
     } 
    }); 
} 

// KPPhotoManager

+ (void)requestImageForAsset:(PHAsset*)asset targetSize:(CGSize)size completeBlock:(void (^)(UIImage *image))completeBlock 
    { 
     [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFill options:[self createImageRequestOptions] resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
      completeBlock(result); 
     }]; 
    } 
+0

pourquoi vous appelez 100 fois créer une image? –

+0

faire un diaporama de photos, peut-être 0.1s afficher une image –

Répondre

0

J'ai créé un nouveau projet de la copie de votre code. J'ai augmenté le nombre d'appels à 10000 et inspectant la mémoire tout semble bien. Il saute un peu mais ne gonfle pas.

J'ai aussi essayé de forcer la charge d'image en utilisant:

for (int i=0; i<10000; i++) { 
    @autoreleasepool { 
     UIImage *image = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"image2.png"]]; 
     [self createFilterImageWithImage:image]; 
    } 
} 

et il ne fonctionne toujours pas gonfler la mémoire.

Comment inspectez-vous votre fuite de mémoire? Cherchez-vous la consommation de mémoire? Existe-t-il des spécificités dans votre projet ou votre fichier, telles que la désactivation de l'ARC?

+0

essayez de charger l'image HD comme 1920x1920 –

+0

si vous essayez de charger l'image HD, puis votre application écraser donc afficher comme vignette –

+0

@ 郑晓 航 j'ai utilisé 1513 × 1087 qui devrait être plus que suffisant . –