gpt4 book ai didi

sdk - UITableViewCell cellForRowAtIndexPath 在第一次滚动时调用大量行

转载 作者:可可西里 更新时间:2023-11-01 06:19:56 25 4
gpt4 key购买 nike

我一直在研究与 UITableView 和 cellForRowAtIndexPath 相关的问题。

我想让用户能够拥有非常多的行,就像 iPhone 上的大量电子邮件列表一样。当我开始创建一个类时,我发现了这个问题,该类会根据需要将数据库中的记录组排队和出队,以节省内存。我发现当我的 UITableViewController 加载时,它会为典型的前 10 个索引(0 到 9)调用 cellForRowAtIndexPath。当我在模拟器的黑色外表面区域上单击鼠标或尝试使用向上手势向下滚动 UITableView 时,就会出现问题。此时,所有剩余索引都会调用 cellForRowAtIndexPath。即使有 1000 多个单元格也会发生这种情况。我尝试重新创建一个只有 100 个索引的非常简单的项目(没什么特别的)。它做完全相同的事情......一旦我滚动,它就会从位置 10 到 99 调用 cellForRowAtIndexPath。

这是 UITableView 的正常行为吗?有没有人知道为什么调用所有行的效率低下?

我会说一旦这个初始通过发生,它似乎开始正常工作。我真的对此感到困惑,因为它几乎不可能根据需要创建一个用于排队和出队记录的类。

这是我更简单的示例项目中的代码:

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 100;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


printf("RootViewController, -tableView:cellForRowAtIndexPath; // indexPath.row = %d\n", indexPath.row);


static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

cell.textLabel.text = @"Example Text";

return cell;
}

安慰:

......
View 的初始加载
......

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 0

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 1

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 2

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 3

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 4

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 5

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 6

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 7

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 8

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 9

......
第一次滚动手势
......

ootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 11

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 12

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 13

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 14

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 15

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 16

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 17

.
.
我在这里删除了一些以缩短它
.
.

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 97

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 98

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 99

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 10

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 11

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 12

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 13

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 14

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 15

RootViewController, -tableView:cellForRowAtIndexPath;//indexPath.row = 16

(gdb)

谢谢你的帮助。

埃里克

编辑(下一天)--> 今天我想尝试一个真正的设备而不是我的模拟器。我的 iPhone 3GS 没有重现这种奇怪的行为。我相信我机器上的模拟器可能有问题。我打算在时间允许的情况下尝试另一个 MAC。

最佳答案

出现此问题的原因是我在 Mac 上安装了一个名为 Cinch 的应用程序。

Cinch 是一个窗口管理应用程序,它为 Mac OS 添加了 Windows 'snap' 功能。否则该程序运行良好。每当我使用 cellForRowAtIndex 路径时,我只需要记住禁用 Cinch。

可悲的是,我不得不重新加载我的整个计算机才能解决这个问题!希望这对遇到这种奇怪功能的其他人有所帮助。

关于sdk - UITableViewCell cellForRowAtIndexPath 在第一次滚动时调用大量行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4038628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com