- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 ios 应用程序,
我有一个普通的表格 View 。调用 heightForRowAtIndexPath 时,我正在执行以下操作
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellId = [self getCellIds][indexPath.row];
BaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
return [cell calculateHeigh];
}
基本上我正在使单元格出队,因为我在每个单元格中都有一个函数 calculateHeigh,它会计算高度。这按预期工作正常,但我有一个问题:
在 heightForRowAtIndexPath
中调用 dequeueReusableCellWithIdentifier:
是否安全?它会引起任何问题吗?
编辑:
为了阐明我这样做的原因,我有大量具有不同标识符的自定义单元格需要加载。为了避免在我的 heightForRowAtIndexPath
中有一个巨大的 if-else 语句,我将单元格高度的 getter 放在自定义单元格中,我只是要求它返回它(那里没有计算),我不能作为类方法来做,因为我不知道是哪个类,我可以从标识符而不是类中获取对象。为了代码的可读性,我想避免使用大的 if-else。
所以我担心的是 dequeueReusableCellWithIdentifier:
在获取高度时调用它是否很重?它会导致内存问题或滞后吗?或者是否值得只做一个 bug if-else 或使用字典?
最佳答案
首先,您应该避免在表格绘制方法中进行任何计算(例如 heightForRow、cellForRow 等)。这些方法被多次调用,尽管您的表格可能很短和/或不复杂(带有带有大量标签、按钮和图像的自定义单元格),但您应该始终尝试优化此绘图过程,否则用户在绘制时会遇到一些令人讨厌的延迟滚动。
所以你应该在调用'reloadTable'之前调用一些方法来准备数据
-(void)prepareMethod
{
//get only one cell to calculate all row heights
BaseTableViewCell *cell = [_myTableView dequeueReusableCellWithIdentifier:cellId];
for (NSDictionary* dataObj in _dataArray)
{
//loop through all rows data and set new property for row height
dataObj[@"rowHeight"] = [cell calculateHeigh];
}
}
然后在调用 heightForRow 时只需传递这个值,而不需要任何昂贵的操作(例如可能的字符串计算):
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//always make sure you don't access unexisting array index
return ( indexPath.row < _dataArray.count ) ? _dataArray[indexPath.row][indexPath.row][@"rowHeight"] : 1.0;
}
当然,您不需要单独的方法来填充数据数组中的行高 - 您可以在填充(格式化)数据数组时填充此值以避免第二次数组迭代。这完全取决于您当前的实现。
请记住,昂贵的绘图方法(不仅适用于表格)应始终尽可能短,并且只获取绘图所需的数据。真的很简单。如果您需要进行一些复杂的计算,请在此之前进行(可能在 View 初始化中),以便在实际绘图之前准备好数据。这样,即使表格更大,您的应用程序也能顺利运行(因为无论表格有多大,UITableViewController 都只绘制可见单元格)。
问候,
克里斯.托
关于ios - 调用 dequeueReusableCellWithIdentifier :cellId inside heightForRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23576489/
当我请求 Cell ID 和 LAC 信息时,在某些设备上我无法检索它们。 我使用这段代码: TelephonyManager tm =(TelephonyManager) getSystemServ
如何获取IMEI、LAC/CELLID数据?这简单吗?在安卓/iphone 中?你能给我写几行吗? 最佳答案 对于串号是吗 TelephonyManager tm = (TelephonyMa
我试图检索当前连接的单元格的 Cid 和 Lac,但是使用 public void GetCid(){ int CID; int LAC; GsmCellLocation xXx = ne
如何获取 CTTelephonyNetworkInfo 中的 cellId 值?下面是我尝试过的代码,但它仍然不起作用。 CTTelephonyNetworkInfo *telephonyInfo =
我正在开发一个 ios 应用程序, 我有一个普通的表格 View 。调用 heightForRowAtIndexPath 时,我正在执行以下操作 - (CGFloat)tableView:(UITab
在android中是否可以获取来电号码的以下信息 中冶 跨国公司 拉丁美洲和加勒比地区 小区编号 我试过代码 TelephonyManager tel = (TelephonyMana
自从我将我的应用程序转移到我的新计算机后,我收到了错误: Unable to dequeue a cell with identifier cellID 尽管代码与我的旧计算机上的代码完全相同,但在我
亲爱的 StackOverflow friend 们,我找到了如何获得 MNC (Mobile Network Code) 和 MCC (Mobile Ccountry Code),但我确实需要获取有
我能够获得小区 ID 和 LAC(本地区域代码)。但不知道如何解码位置。我不应该连接到互联网,应该使用 Cell Id 和 LAC 获取手机信号塔的位置。 如果还记得基本型号的手机(不是基于 Andr
我正在尝试在 iOS 10.x 中以编程方式获取 CellID 和 LAC。 我试过Get CellID, MCC, MNC, LAC, and Network in iOS 5.1但这在 8.3 及
我想制作一个应用程序来查找接收信号强度和邻近的手机信号塔。我成功获取了每个相邻蜂窝塔的 cellid、mnc、mcc、lac 和信号强度。但我想使用 cellid、lac、mnc、mcc 计算每个蜂窝
我正在尝试通过 getNeighboringCellInfo() 获取 Android 3G 中的相邻单元格位置。当手机在GSM模式下工作时,我可以使用getCid()和getLac()来获取Cell
从 iOS 5.X 开始,我曾经使用这些方法获取广播信息:Get CellID, MCC, MNC, LAC, and Network in iOS 5.1 但是对于 iOS 8.3 beta(和 8
问题 假设我知道希尔伯特曲线面和四叉树,例如 4/032212303102122 (第 4 面,第 15 层)。 或者我可能知道 S2 Geometry CellId,例如 9749618424903
如何获取诺基亚 E71 的小区 ID、MCC、LAC? 我正在使用以下代码,但无法找到 cellid、MCC、LAC 值。 我尝试通过j2me代码找到这个值。 请帮我找到这个值 获取cell id的代
我需要在 iOS 5.1 (iPhone 4S) 中检索当前服务基站的 CellID、MCC、MNC、LAC 和网络(GSM、3G)。我知道此信息可用,因为我可以在 FieldTest 模式下看到它(
如何在 ios 8.3 中使用私有(private) api 获取小区 ID,因为以前的核心电话私有(private) api 在最新的 ios sdk 8.3 中不起作用。 最佳答案 您仍然可以使用
如何在 ios 8.3 中使用私有(private) api 获取小区 ID,因为以前的核心电话私有(private) api 在最新的 ios sdk 8.3 中不起作用。 最佳答案 您仍然可以使用
我是一名优秀的程序员,十分优秀!