Sunday 25 December 2011

Lazy Loading in UITableview In IPhone'


In your Class.h put
NSMutableDictionary *Dict_name;
BOOL isDragging_msg, isDecliring_msg;
Now In Class.m file Put this code.
In view did load
Dict_name = [[NSMutableDictionary alloc] init];
In cell for row at index path
if ([dicImages_msg valueForKey:[[msg_array objectAtIndex:indexPath.row] valueForKey:@"image name or image link"]]) { 
    cell.image_profile.image=[dicImages_msg valueForKey:[[msg_array objectAtIndex:indexPath.row] valueForKey:@"image name or image link"]];
}
else
{
    if (!isDragging_msg && !isDecliring_msg)
    {
        [dicImages_msg setObject:[UIImage imageNamed:@"Placeholder.png"] forKey:[[msg_array objectAtIndex:indexPath.row] valueForKey:@"image name or image link"]];
        [self performSelectorInBackground:@selector(downloadImage_3:) withObject:indexPath];
    }
    else
    {
        cell.image_profile.image=[UIImage imageNamed:@"Placeholder.png"];
    }
}
and for download image the function is:-
-(void)downloadImage_3:(NSIndexPath *)path{
    NSAutoreleasePool *pl = [[NSAutoreleasePool alloc] init];

    NSString *str=[here Your image link for download];

    UIImage *img = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:str]]]; 

    [dicImages_msg setObject:img forKey:[[msg_array objectAtIndex:path.row] valueForKey:@"image name or image link same as cell for row"]];

    [tableview performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

    [pl release];
}
and at last put these methods in your class
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    isDragging_msg = FALSE;     
    [tableview reloadData];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    isDecliring_msg = FALSE;
    [tableview reloadData]; }
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    isDragging_msg = TRUE;
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    isDecliring_msg = TRUE; }

Thnaks,

6 comments:

  1. I found many tutorial for lazy loading, but this is the best one :)

    ReplyDelete
  2. "dicImages_msg" is also NSDictionary declared in .h file and intialized in viewDidLoad.

    ReplyDelete
  3. Can you provide the sample code please.

    ReplyDelete
  4. Excellent and simple idea to implement lazy loading.Could you please give some explanation about the PerformSelectorOnMainThread and PerformSelectorOnBackground methods,then it is very useful.

    ReplyDelete