【问题标题】:Scrolling issue in iPhone app running on 3GS在 3GS 上运行的 iPhone 应用程序中的滚动问题
【发布时间】:2011-12-16 11:43:15
【问题描述】:

当我在 iPhone 3S 上运行以下方法时,会导致滚动问题。我知道我们可以提高滚动的性能,但即使在网上搜索了很多并尝试了几件事后也不知道该怎么做。

如果有人可以修改以下代码或仅指出以下代码中需要更改的内容,我遇到过使单元格不透明和/或将表格视图设置为子视图以大大提高滚动性能。 我的代码如下。

// 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;
}

【问题讨论】:

  • iPhone 3S 不存在,是 3GS。 [掌心];
  • @maddy2011 : 你的录取率很差。

标签: iphone xcode uitableview scroll


【解决方案1】:

[cellIdentifier 发布] ?? 你不释放静电! 您的单元重用可能因此而失败。

UITableViewCell 分配也没有自动释放。这应该会导致大量泄漏,并最终导致应用程序变慢/崩溃。

这是泄漏+单元重用失败的致命组合

希望对你有帮助

【讨论】:

  • 感谢指正。我已经相应地更改了代码,一旦我拿回我的设备,我就会测试这个案例。代码中需要注意的另一件事是,我正在使用的*abook 对象Book *aBook = [appDelegate.books objectAtIndex:indexPath.row]; 被声明为结构。与使用数组相比,这会导致获取记录然后将其分配给单元格的速度变慢吗?
  • 没关系。除非您在某处进行“按值传递”,否则混合 C 不应导致任何性能问题。这行代码我觉得没问题。
  • 好的。我更改了上面代码中的 2 行,滚动改进了很多
  • 好的。我更改了上面代码中的 2 行,滚动改进了很多。 [CellIdentifier release]; cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 代码中其他地方还有其他内存泄漏,这导致了一些滚动问题,也可能是因为它一次又一次地为单元格着色,这可能导致滚动平滑度变慢。我需要检查一下。谢谢。任何人都想对这一点发表评论,那么我将不胜感激。
  • 你提到的这一点确实有效。在我评论[CellIdentifier release]; 之后,它现在运行良好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多