English 中文(简体)
UITableView lazy 装载优化
原标题:UITableView lazy loading optimization

I have UITableView. in tableView:cellForRow:atIndexPath: method (when data populates to cells) I ve implemented some kind of lazy loading. If there s no object for key(key==row number) in rowData NSDictionary program launches requestDataForRow: method in background. so the data in cells gets populated a bit after the cell becomes visible. Here s the code:

static int requestCounter=0;

-(void)requestDataForRow:(NSNumber *)rowIndex
{
    requestCounter++;
    //NSLog(@"requestDataForRow: %i", [rowIndex intValue]);
    PipeListHeavyCellData *cellData=[Database pipeListHeavyCellDataWithJobID:self.jobID andDatabaseIndex:rowIndex];
    [rowData setObject:cellData forKey:[NSString stringWithFormat:@"%i", [rowIndex intValue]]];
    requestCounter--;

    NSLog(@"cellData.number: %@", cellData.number);

    if (requestCounter==0)
    {
        //NSLog(@"reloading pipe table view...");
        [self.pipeTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    };
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"pipeCellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    [[NSBundle mainBundle] loadNibNamed:@"PipesForJobCell" owner:self options:nil];
    cell = pipeCell;
    self.pipeCell = nil;


    PipeListHeavyCellData *cellData=[[PipeListHeavyCellData alloc] init];

    if ([rowData objectForKey:[NSString stringWithFormat:@"%i", indexPath.row]]==nil)
    {
        //NSLog(@"        nil data for row: %i", indexPath.row);
        [self performSelectorInBackground:@selector(requestDataForRow:) withObject:[NSNumber numberWithInt:indexPath.row]];
    }
    else
    {
        //NSLog(@"        has data for row: %i", indexPath.row);
        PipeListHeavyCellData *heavyData=[[PipeListHeavyCellData alloc] init];
        heavyData=(PipeListHeavyCellData *)[rowData objectForKey:[NSString stringWithFormat:@"%i", indexPath.row]];
        cellData._id=[heavyData._id copy];
        cellData.number=[heavyData.number copy];
        cellData.status=[heavyData.status copy];
};

该法典的操作方式是:KOK,BUT,我的表格有2000年浏览量,如果用户从指数10的手机到指数2000的电池。 他必须等待很长时间才能完成所有拉动数据要求(关于第11、12、13、......和2000卷,第11、第12、第13、第12、第12、第3、第12、第12、第12、第3、第12、第12、第12、第12、第3、第12、第12、第12、第12、第12、第12、第12、第12、第12、第3、第12、第12、第12、第12、第12、第12、第12、第12、第3、第12、第12、第12、第12、第3、第12、第12、第12、第3、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、

How can I optimize those things?

最佳回答

我不得不做类似的事情。 你们需要首先处理最近增加的项目。

例如,用户开放表格,提出10项申请。 您排出第一物体,开始排出第一行的数据。 然而,用户然后向31-40分排。 那么,你不得不在头10岁之前插入这些句子,因为现在它们更优先。 关键是,你不会立即启动10项请求,而是处理这些请求。 这样,当用户卷时,你只要求“废物”——这是最后提出的要求。

实际执行这一条的一个容易的方法是使用<代码>。

问题回答

暂无回答




相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签