我正在通过覆盖drawRect来为UIView创建自定义视图的子类。我需要找到一个等于View宽度的10%的点。当然,这个距离计算是微不足道的(self.bounds.size.width / 10.0f)。我想缓存这个值,也就是说,我想将这个值存储在一个实例变量中,以避免在每个drawRect上计算它:。
我会在什么方法中存储此值?我在考虑在initWithFrame:中保存变量的值,但是在任何类型的调整后,缓存的值将与视图的宽度不同步。
关于缓存视图宽度的最佳位置的任何想法是......如果它甚至可以这样做吗?
答案 0 :(得分:3)
您可以将值存储在ivar中并在layoutSubviews中重新计算它。
然而,这是过早优化的明显例子。您应该专注于编写好的代码,并在需求变得明显时进行优化。事实上,这种“优化”甚至可能对您的应用程序的性能产生负面影响:划分两个数字或查找ivar的值是否更加昂贵?
答案 1 :(得分:3)
这个距离很难计算(self.bounds.size.width / 10.0f)......
我想缓存这个值,也就是说,我想将这个值存储在一个实例变量中,以避免在每个drawRect上计算它:。
这里的一切都是微不足道的。没有理由缓存它。
你有:
关于缓存视图宽度的最佳位置的任何想法是......如果它甚至可以这样做吗?
最好的地方就在这里:
- (void)drawRect:(CGRect)rect {
// ...
const CGFloat tenthWidth = self.bounds.size.width * 0.10f;
// ...
}
还注意使用乘法的乘法;)