NSCache 和自定义 UITableView 绘图

发布于 2024-11-30 10:01:50 字数 578 浏览 0 评论 0原文

我有一个 UITableView ,它使用 UIView 子类作为其 backgroundViewselectedBackgroundView 属性。根据位置(顶部/底部圆角)、选择状态和一些自定义细节附件,视图将被重新绘制。

这可能是一项昂贵的操作,因此我正在考虑使用 NSCache 来缓存一些绘制的视图。我目前正在考虑不同的方法:

  • 根据其自定义属性缓存视图(如果同一时间多次使用视图则不起作用 -> 失败)
  • 根据其自定义属性缓存视图并使用该视图的副本视图(UIView 不符合 NSCopying 协议 -> 失败)
  • 缓存视图的 UIImage 表示并将它们分配到 UIImageView
  • 不要使用根本不使用 NSCache 或者根本不使用自定义绘图?
  • ???

那么 iOS 性能调优器,您更喜欢哪种方法?

提前谢谢!

I have a UITableView which uses a UIView subclass for its backgroundView and selectedBackgroundView properties. Depending on the position (top/bottom round corners), the selection state and some custom detail accessories the views get redrawn.

This might be an expensive operation so I'm thinking about using NSCache for caching some of the drawn views. I'm currently thinking of different approaches:

  • Cache the view depending on its custom properties (not working if a view is used more than once the same time -> fail)
  • Cache the view depending on its custom properties and use a copy of the view (UIView does not conform to NSCopying protocol -> fail)
  • Cache a UIImage representation of the views and assign them in a UIImageView
  • Don't use NSCache at all or don't use custom drawing at all?
  • ???

So iOS-performance-tuners, which approach would you prefer?

Thx in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

捂风挽笑 2024-12-07 10:01:50

不要过早优化!

剪切视图并不是那么昂贵,我在商店里有一些应用程序,它们以 60FPS 的速度滚动,同时使用带有 drawRect 和 roundRect-Mask 的自定义绘制背景。

创建 selectedBackgroundView 的问题就更少了,因为用户主动执行任务(点击),如果生成视图有 50 毫秒的延迟,没有人会注意到。

此外,NSCache 是线程保存的,因此它有点慢,而且很可能比您想要的开销更多。

关于“视图的副本”,我看不出您有任何理由想要这样做。

Don't prematurely optimize!

Clipping the views isn't that expensive, I have a few apps in the store that scroll at 60FPS while using custom drawn background with drawRect and a roundRect-Mask.

Creating the selectedBackgroundView is even less problem, since the user actively does a task (tap) and if there's like 50ms delay for generating the view, nobody will notice.

Further, NSCache is thread save, so it's a bit slower and most likely more overhead than you want.

Regarding "copy of the view" I don't see any reason why you would want that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文