Это допустимое использование для блоков в Obj-C? - PullRequest
2 голосов
/ 10 марта 2010

В моем конструкторе я хочу создать случайный цвет.

Поэтому мне нужно три случайных 7-битных числа с плавающей точкой в ​​диапазоне 0… 1, которые составляют красный, зеленый и синий компонент цвета. Вместо того, чтобы писать довольно длинный random() % 128 / 128.0 три раза, я помещаю это в блок:

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

Это правильный способ использования блоков?
Если нет, то что бы вы использовали вместо этого?

Ответы [ 2 ]

5 голосов
/ 10 марта 2010

Собираетесь ли вы вернуть randFloat? Будет ли randFloat использовать какие-либо состояния, не отделимые от соседних функций (то есть является ли randFloat закрытием)? В противном случае он более переносим (например, официальный SDK iPhone пока не поддерживает блоки) и эффективен для создания статической функции вне функции:

static CGFloat randFloat() {
    return random() % 128 / 128.0;
}
...
color = CGColorCreateGenericRGB(randFloat(), randFloat(), randFloat(), .5);
1 голос
/ 10 марта 2010

Нет ничего неправильного с использованием блока таким образом. Лично я бы не стал в этом случае, поскольку создание блока для операции фактически удлиняет код. Но в принципе все нормально. Если эта функция больше нигде не используется, зачем предоставлять ей больший объем, чем нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...