这是Obj-C中块的有效用法吗?

时间:2010-03-10 17:47:06

标签: objective-c colors

在我的构造函数中,我想创建一个随机颜色。

因此,我需要三个随机的7位浮点数,范围为0 ... 1,构成颜色的红色,绿色和蓝色分量。我把它放在一个块中,而不是写了相当长的random() % 128 / 128.0三次:

CGFloat (^randFloat)() = ^(){ return random() % 128 / 128.0; };
color = CGColorCreateGenericRGB(randFloat(), randFloat(), randFloat(), .5);

这是否是使用积木的有效方式?
如果没有,你会用什么呢?

2 个答案:

答案 0 :(得分:5)

您要返回randFloat吗?请randFloat使用任何与附近函数不可分离的状态(即randFloat是否为闭包)?如果没有,它更具可移植性(例如iPhone官方SDK不支持块)并且在函数之外创建静态函数是高效的:

static CGFloat randFloat() {
    return random() % 128 / 128.0;
}
...
color = CGColorCreateGenericRGB(randFloat(), randFloat(), randFloat(), .5);

答案 1 :(得分:1)

使用块的方式没有错误。在这种情况下我个人不会,因为为操作创建一个块实际上会使代码更长。但原则上似乎很好。如果这个函数从未在其他任何地方使用过,为什么要给它一个比它需要的更大的范围呢?