Problema de retraso de vista de tabla de iOS, estoy usando el envío y save el caching

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewCell" forIndexPath:indexPath]; cell.tag = indexPath.row; //cell.imageView.image = nil; // Rounded Rect for cell image CALayer *cellImageLayer = cell.imageView.layer; [cellImageLayer setCornerRadius:25]; [cellImageLayer setMasksToBounds:YES]; [self getImages]; [self storeImages]; UIImage *image =_ResimSonHali[indexPath.row]; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); dispatch_async(queue, ^(void) { if (image) { dispatch_async(dispatch_get_main_queue(), ^{ if (cell.tag == indexPath.row) { CGSize itemSize = CGSizeMake(50, 50); UIGraphicsBeginImageContext(itemSize); CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); [image drawInRect:imageRect]; // cell.ThumbImage.image = image1; cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [cell setNeedsLayout]; } }); } }); cell.TitleLabel.text = _TarifAdi[indexPath.row]; return cell; } -(void)getImages { NSMutableArray *fuckingArrayYemek = [[NSMutableArray alloc] init]; for (int i=0; i<[_ResimAdiBase count]; i++) { NSString *testString=_ResimAdiBase[i]; NSArray *ImageNames = [testString componentsSeparatedByString:@"."]; [self cacheImage: _ResimAdi[i] : ImageNames[0] ]; [fuckingArrayYemek addObject:ImageNames[0]]; } _ResimSonAdi = fuckingArrayYemek; } -(void) storeImages { NSMutableArray *fuckingArrayYemekName = [[NSMutableArray alloc] init]; for (int i=0; i<[_ResimAdiBase count]; i++) { [fuckingArrayYemekName addObject:[self getCachedImage:_ResimSonAdi[i]]]; } _ResimSonHali = fuckingArrayYemekName; } - (void) cacheImage: (NSString *) ImageURLString : (NSString *)imageName { NSURL *ImageURL = [NSURL URLWithString: ImageURLString]; // Generate a unique path to a resource representing the image you want NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [paths objectAtIndex: 0]; NSString *docFile = [docDir stringByAppendingPathComponent: imageName]; // Check for file existence if(![[NSFileManager defaultManager] fileExistsAtPath: docFile]) { // The file doesn't exist, we should get a copy of it // Fetch image NSData *data = [[NSData alloc] initWithContentsOfURL: ImageURL]; UIImage *image = [[UIImage alloc] initWithData: data]; // Is it PNG or JPG/JPEG? // Running the image representation function writes the data from the image to a file if([ImageURLString rangeOfString: @".png" options: NSCaseInsensitiveSearch].location != NSNotFound) { [UIImagePNGRepresentation(image) writeToFile: docFile atomically: YES]; } else if([ImageURLString rangeOfString: @".jpg" options: NSCaseInsensitiveSearch].location != NSNotFound || [ImageURLString rangeOfString: @".jpeg" options: NSCaseInsensitiveSearch].location != NSNotFound) { [UIImageJPEGRepresentation(image, 100) writeToFile: docFile atomically: YES]; } } } - (UIImage *) getCachedImage : (NSString *)imageName { NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString* cachedPath = [documentsDirectory stringByAppendingPathComponent:imageName]; UIImage *image; // Check for a cached version if([[NSFileManager defaultManager] fileExistsAtPath: cachedPath]) { image = [UIImage imageWithContentsOfFile: cachedPath]; // this is the cached image } else { NSLog(@"Error getting image %@", imageName); } return image; } 

Cuando carga 20 datos, nuestra tabla no se queda atrás, pero cuando intentamos boost la vista de tabla de tamaño de datos, nos retrasamos cómo podemos probar este problema. Primero intentamos despachar y luego tratamos de save el caching de imágenes, aún tenemos retraso. Aproximadamente, lidiamos con este problema aproximadamente 3 días.

Esta es la línea de problema dentro del método cacheImage (), que se llama con cada llamada del método "cellForRowAtIndexPath"

 NSData *data = [[NSData alloc] initWithContentsOfURL: ImageURL]; 

Entonces, para resolver el problema, use esta línea en la sección dispatch_async. Y actualice su código según él.