最近,我一直在对应用程序的乐器进行一些性能分析。这是我注意到:为什么UIButton框架设置太慢
即在UIButton的边框设置是很慢的。
要(从int到CGFloat的)排除它是类型转换引起的概率,我曾尝试以下:
我也曾尝试:
不,也没有太大的帮助。
最后但并非最不重要我已经确定它是不是由CGRectMake:
的函数被调用大约650-670倍,这使得每一帧设置通话大约0.173ms?这听起来是对的吗?我怎么能改善表现?
最近,我一直在对应用程序的乐器进行一些性能分析。这是我注意到:为什么UIButton框架设置太慢
即在UIButton的边框设置是很慢的。
要(从int到CGFloat的)排除它是类型转换引起的概率,我曾尝试以下:
我也曾尝试:
不,也没有太大的帮助。
最后但并非最不重要我已经确定它是不是由CGRectMake:
的函数被调用大约650-670倍,这使得每一帧设置通话大约0.173ms?这听起来是对的吗?我怎么能改善表现?
嗯......我不是100%确定的,但是您使用的按钮类型为UIButtonTypeDetailDisclosure
,它有一个固定的大小。
试着设置它的中心而不是框架。
myDetailButton.center = CGPointMake(12, 12);
的,而不是...
myDetailButton.frame = CGRectMake(0, 0, 23, 23);
另外,f
不是必需的,它IIRC使用时,实际上可以采取更多的内存。只需使用23
或23.0
而不是23.0f
。我必须为此找到一个参考。
编辑
说了这么多我只是看到你的时间统计在问题的底部。
你在这里看到的百分比是相对的。 0.173毫秒几乎没有时间。
通过不多次运行该功能,您可能会获得更好的性能提升。你正在运行700次。好多啊!你真的需要多次运行它吗?你甚至无法一次将那么多按钮放到屏幕上。
也许你需要将它们出列吗?毕竟你使用的是MKMapView
。
你是什么意思将他们出列? –
嗯,我需要看到更多的代码来确定你想要用按钮做什么。 tableView和collection视图管理单元格的方式与地图管理注释视图的方式相同。如果一个表有100个项目,但只有10个在屏幕上,那么它只会创建10个单元格。然后,当一个单元格离开屏幕时,该单元格被再次标记为可用于下一个项目,因此只有10个单元格。这样做是有道理的,而不是将700个按钮加载到内存中。只有足够的显示在屏幕上并重新使用它们。 – Fogmeister
非常感谢您的帮助,但它有点难,因为服务器在第一次查询时返回了600多个结果,所以除非更改查询的处理方式,否则无法轻松解决。 –