Это связующее соединение может не сработать, как описал hatfinch в его ответ здесь , потому что CGColorRef, возвращенный из -CGColor
, может не зависать после вашей последней ссылки на UIColor, который его генерирует. Я думал, что это ошибка, основанная на обсуждении в этой ветке форума разработчиков Apple , но это было неправильное прочтение того, как управлять временем жизни этих CGColorRefs.
Одним из способов, с помощью которого это будет работать, является использование встроенного моста, предоставляемого методом -CGColor
в UIColor. Вместо сохранения вашего CGColor во временную переменную, как вы делали выше, вы должны использовать что-то вроде следующего:
NSArray *colors = [NSArray arrayWithObjects:(id)[color1 CGColor],
(id)[color2 CGColor], nil];
с color1
и color2
в качестве экземпляров UIColor.
Для мостов используется метод -CGColor
, согласно разделу «Компилятор обрабатывает объекты CF, возвращенные из методов какао» в Переход к примечаниям к выпуску ARC . В документации в настоящее время отсутствует приведённый выше приведённый тип, который необходим для компиляции.
Я проверил это, и, похоже, в моем случае это работает, совпадая с тем, что Бен сообщает в вышеупомянутой ветке Форумы разработчиков.
В дополнение к вышесказанному, вы можете явно сохранить и освободить CGColorRefs, возвращенные из метода -CGColor
, и соединить их через NSArray, опять же, как показано в шапке здесь .