我有一个名为arc4random_uniform()
的函数,每次NSTimer发出激活时都会调用它(设置为2秒间隔)。目标是每2秒将球颜色更改为随机颜色,而不连续重复两种颜色。除了颜色几乎立即变化,有时需要4秒才能改变。当需要更长时间更改时,我注意到在xcode调试器中,在颜色变化之前,CPU使用率会瞬间达到99%。 func changeBallColor() {
var previousint: UInt32?
var randint = arc4random_uniform(4)
while previousint == randint {
randint = arc4random_uniform(4)
}
previousint = randint
if previousint == 0 {
imageBall.image = UIImage(named: "circle_g.png")
} else if previousint == 1 {
imageBall.image = UIImage(named: "circle_b.png")
} else if previousint == 2 {
imageBall.image = UIImage(named: "circle_r.png")
} else if previousint == 3 {
imageBall.image = UIImage(named: "circle_y.png")
}
}
需要一段时间才能完成或某事(在使用while循环的情况下)吗?如果是这样,我如何优化此代码以使其运行完美?对不起,对于Swift来说,我是一个菜鸟。
{{1}}
答案 0 :(得分:2)
我对CPU峰值没有任何解释,但4秒很容易解释为你的代码连续两次阻止相同的数字是错误的。每次输入changeBallColor
时,都会创建一个新的previousint
,其中nil
为默认值。
这导致循环根本不被执行,因为nil
永远不会等于任何arc4random_uniform(4)
返回。
将previousint
的定义移出您的类,使其在changeBallColor
的连续调用中保持其值:
class ABC {
var previousint: UInt32?
func changeBallColor() {
var randint = arc4random_uniform(4)
while previousint == randint {
print("loop")
randint = arc4random_uniform(4)
}
previousint = randint
if previousint == 0 {
imageBall.image = UIImage(named: "circle_g.png")
} else if previousint == 1 {
imageBall.image = UIImage(named: "circle_b.png")
} else if previousint == 2 {
imageBall.image = UIImage(named: "circle_r.png")
} else if previousint == 3 {
imageBall.image = UIImage(named: "circle_y.png")
}
}
}