如果我们在 numberOfRowsInSection 中返回 100 就像
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 100;
}
那么在方法中一次将创建多少个单元格cellForRowAtIndexPath
?
如果我们在 numberOfRowsInSection 中返回 100 就像
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 100;
}
那么在方法中一次将创建多少个单元格cellForRowAtIndexPath
?
实际上它不会分配所有 100 个单元格。取而代之的是目前可见的那些。当我们使用[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
时,单元被重用于内存处理。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
只返回单元格的总数。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
每次滚动表格视图时都会调用此方法。
如果您要问该方法将被调用多少次-tableView:cellForRowAtIndexPath:
,答案是它会被调用,因为目前可见的单元格是多少。当您滚动时,将为即将显示的每个新单元格调用它。它怎么知道现在有多少个细胞是可见的?-tableView:heightForRowAtIndexPath:
为每个单元格调用 以计算表格视图的 contentSize 。
单元格的数量返回其基于UITableView
高度的基础。表示第一次返回单元格显示的数量。tableView:cellForRowAtIndexPath
方法只调用可见单元格,而不是调用不可见单元格UITableView
。如果您滚动然后tableView:cellForRowAtIndexPath
重用以前的不可见单元格而不是创建新的单元格。
同意@pbibergal,如果您使用 dequeueReusableCellWithIdentifier 并设置如下条件,则一次创建大约九 (9) 个单元格(单元格数量取决于 tableview 高度)。否则系统一次创建 100 个单元。
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell = [[MainCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
如果您使用上面的代码,那么一次创建一个时间有限的单元格(九个单元格),否则一次创建 100 个单元格并且它在内存中受到影响。
这取决于您的细胞类型。如果您设置 dequeueReusableCellWithIdentifier,那么它只会初始化您在屏幕上看到的内容,当您滚动时,它将向下滚动到您在上述方法中设置的行数。
它将分配所有 100 个Cells
,但一次只可见,Cells
这将根据
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
的高度Cell
和宽度UITableView
Frame