0

如果我们在 numberOfRowsInSection 中返回 100 就像

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
     return 100;
 }

那么在方法中一次将创建多少个单元格cellForRowAtIndexPath

4

6 回答 6

1

实际上它不会分配所有 100 个单元格。取而代之的是目前可见的那些。当我们使用[tableView dequeueReusableCellWithIdentifier:cellIdentifier];时,单元被重用于内存处理。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

只返回单元格的总数。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

每次滚动表格视图时都会调用此方法。

于 2013-02-26T13:15:34.190 回答
1

如果您要问该方法将被调用多少次-tableView:cellForRowAtIndexPath:,答案是它会被调用,因为目前可见的单元格是多少。当您滚动时,将为即将显示的每个新单元格调用它。它怎么知道现在有多少个细胞是可见的?-tableView:heightForRowAtIndexPath:为每个单元格调用 以计算表格视图的 contentSize 。

于 2013-02-26T13:07:17.967 回答
0

单元格的数量返回其基于UITableView高度的基础。表示第一次返回单元格显示的数量。tableView:cellForRowAtIndexPath方法只调用可见单元格,而不是调用不可见单元格UITableView。如果您滚动然后tableView:cellForRowAtIndexPath重用以前的不可见单元格而不是创建新的单元格。

于 2013-02-26T13:14:35.433 回答
0

同意@pbibergal,如果您使用 dequeueReusableCellWithIdentifier 并设置如下条件,则一次创建大约九 (9) 个单元格(单元格数量取决于 tableview 高度)。否则系统一次创建 100 个单元。

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

如果您使用上面的代码,那么一次创建一个时间有限的单元格(九个单元格),否则一次创建 100 个单元格并且它在内存中受到影响。

于 2013-02-26T13:49:08.017 回答
0

这取决于您的细胞类型。如果您设置 dequeueReusableCellWithIdentifier,那么它只会初始化您在屏幕上看到的内容,当您滚动时,它将向下滚动到您在上述方法中设置的行数。

于 2013-02-26T13:06:55.897 回答
0

它将分配所有 100 个Cells,但一次只可见,Cells这将根据

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

的高度Cell和宽度UITableView Frame

于 2013-02-26T13:09:07.337 回答