隐藏或删除 uiLabels 以提高性能
Posted
技术标签:
【中文标题】隐藏或删除 uiLabels 以提高性能【英文标题】:hide or remove uiLabels for performance 【发布时间】:2011-03-29 07:53:38 【问题描述】:我在长滚动视图上有 200 多个 uiLabels,我需要提高滚动性能。当标签不在视线范围内时,是隐藏和取消隐藏标签,还是释放它们并重新创建它们更好? 我已经在它们上面放了标签,我目前正在使用这些标签来隐藏/取消隐藏:
for (int i=0; i<42; i++)
[theScroller viewWithTag:i].hidden = NO;
反之亦然,由滚动 contentOffset.y 值触发..
我在 plist 中有我的 uiLabels 集合,所以它也很容易发布和重建它们?
感谢您的帮助..
【问题讨论】:
【参考方案1】:@Mark 是的,最好释放标签,就好像它们不在视线范围内,不在使用中一样,这样它们会提高性能并帮助您进行内存管理。
【讨论】:
发布 uiLabel 我会调用: for (int i=0; i @mark remove 这种方式在循环中写[[theScroller viewWithTag:i] release];,不是这样[release [theScroller viewWithTag:i]];。我上面提到的将释放标签。 感谢萨比,只是另一件事!我已经看到,当我在制作对象时添加标签时,我不应该使用 0 或 1,你(或任何人)听说过吗? No mark 我没听说过,即使我也使用 0 的标签作为我的自定义图像选择器。你可以这样做,我想是的。你可以用谷歌搜索。祝你好运兄弟........如果我上面的回答对你有帮助,那么也请采纳。 我不得不使用:[[theScroller viewWithTag:i] removeFromSuperview];最后。【参考方案2】:观看次数超过 200 次会降低性能,原因是:
内存使用情况 显示管理/动画删除和释放隐藏标签并在需要时重新创建它们绝对会更好:内存占用会更少,并且超级视图将只有几个子视图需要管理(加上重新创建标签的开销不是那么高)。
如果您的滚动视图 + 标签行为接近于表格视图的行为,则还有进一步改进的空间:标签重用。从他们的超级视图中删除隐藏的标签,更改他们的标题/样式并将它们重新添加到新的位置。
【讨论】:
感谢您的删除/发布建议。我认为我不能使用表格或重复使用标签,因为我所有的标签都是不同的尺寸? 可以随时更新标签的样式和框架(尽管重新计算框架需要您做更多的工作)。但是,您可以先从 remove-release + recreate 开始,然后看看它是否足以满足您的需求。【参考方案3】:可能有助于提高性能的一件事是将标签设置为不透明。使用具有透明背景的视图时性能会下降。
动态创建它们绝对是一种解决方案,但是,您可能会注意到滚动可能会时不时地挂起,或者标签不会在您滚动后不久出现。
另一种解决方案是使用this article 中的方法。这个想法是您可以在视图上预渲染标签,并最终得到一个静态视图,当您滚动时应该可以很好地工作。
【讨论】:
非常感谢,我会阅读这篇文章,但我的 scrollView 是 92000 像素长!! 关于透明问题,我确实有一大组 uilabels,我已经旋转了 90 度,并且它们的背景颜色设置为清除,有什么解决方法吗? hmm 阅读文章方法处理透明问题反正!我将继续阅读...... 哇,第一次通读时似乎有点棘手,我需要一个简单的方法,用数百个标签对我的 scrollView 进行快照,然后将其视为一个预渲染视图。任何人的任何其他文章或链接都会有很大帮助... 我将尝试第 1 页上讨论的发布/创建方法,但我会继续研究这种预渲染方法,因为它看起来很理想......【参考方案4】:如果每个标签都是刚性的,您可以尝试使用 tableView 代替滚动视图。
使用自定义表格单元格,每个单元格都有您的标签。
【讨论】:
当我的所有标签的大小和颜色都不同时,我可以使用 tableView 吗? 可以实时配置。以上是关于隐藏或删除 uiLabels 以提高性能的主要内容,如果未能解决你的问题,请参考以下文章
Groupby、Split 和 Count 组合(删除循环以提高 pytorch 性能)
多个小型 spritesheet 或一个巨大的 spritesheet 以提高性能? ---(java游戏开发)[关闭]