The below method is causing the Scrolling problem when i run it on my iPhone 3S. I know we can increase the performance of Scrolling but don’t know how to do it even after searching a lot on the net and tried several things.
I have come across making cells opaque and/or making Table views as Sub views to greatly increase the Scrolling performance if someone can modify the below code or just point what needs to change in the below code.
My code is below.
// cell is created for each row of track.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"tableView cellForRowAtIndexPath");
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[CellIdentifier release];
cell.accessoryView = nil;
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
/** saving the data in Book structure.**/
Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
[cell.textLabel setText: aBook.name];
// indexrow refers to each cell
temp =[appDelegate.tracklocation intValue];
requesttemp =[appDelegate.requestlocation intValue];
// Coloring Code starts
// indexPath starts from 0th cell that is why it is incremented by 1
if(temp==(indexPath.row+1))
{
NSLog(@"value of temp inside if is = %d",temp);
NSLog(@"value of indexrow inside if is=%d",(indexPath.row+1));
UIImageView *imageView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"speaker.png"]];
imageView1.backgroundColor = [ UIColor greenColor ];
cell.contentView.backgroundColor = [ UIColor greenColor ];
[cell.textLabel setBackgroundColor:[UIColor greenColor]];
[cell.textLabel setTextColor:[UIColor blackColor]];
[cell.detailTextLabel setBackgroundColor:[UIColor greenColor] ];
[cell.detailTextLabel setTextColor:[UIColor blackColor] ];
cell.accessoryView = imageView1;
[imageView1 release];
}
else
{
cell.contentView.backgroundColor = [ UIColor whiteColor ];
[cell.textLabel setBackgroundColor:[UIColor whiteColor] ];
[cell.textLabel setTextColor:[UIColor blackColor ]];
[cell.detailTextLabel setBackgroundColor:[UIColor whiteColor]];
[cell.detailTextLabel setTextColor:[UIColor grayColor] ];
}
while(requesttemp>temp)
{
if (requesttemp==(indexPath.row+1))
{
if (colorflag==1)
{
NSLog(@"value of request temp inside while is = %d",requesttemp);
NSLog(@"value of indexrow inside while is=%d",(indexPath.row+1));
cell.contentView.backgroundColor = [ UIColor blueColor ];
[cell.textLabel setBackgroundColor:[UIColor blueColor ]];
[cell.textLabel setTextColor:[UIColor whiteColor ]];
[cell.detailTextLabel setBackgroundColor:[UIColor blueColor] ];
[cell.detailTextLabel setTextColor:[UIColor whiteColor] ];
}
}
requesttemp=requesttemp-1;
}
}
cell.detailTextLabel.text = abook.artist;
cell.detailTextLabel.numberOfLines = 1;
cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"RootViewController cellForRowAtIndexPath %@ ",cell);
return cell;
}
[cellIdentifier release] ??
You don’t release statics !!
Your cell reuse is probably failing because of it.
Also there is no autorelease on UITableViewCell allocation. This should be causing lots of leaks and ultimately slow down / crash the app as well.
This is a deadly combination of leak + cell reuse failure
Hope this helps