Присвоение существующего CGColor свойству CGColor работает в iOS Simulator, но не на iOS устройстве. Почему?

Я знаю, как решить проблему, которую я собираюсь изложить, однако я немного озадачен тем, почему сценарий кода работает в симуляторе iOS, но не на моем iPad.

У меня есть метод, который проверяет различные свойства, а затем устанавливает цвет фона CALayer в зависимости от состояния свойства. Следующий код похож на мой метод назначения цвета:

//This will be the CALayer BGColor...
CGColor c = UIColor.blueColor.CGColor; //Blue is the default
switch (myState)
{
    case state_one:
        c = UIColor.greenColor.CGColor;
        //... more code ...
        break;
    case state_two:
        c = UIColor.redColor.CGColor;
        //... more code ...
        break;
    case state_three: //multiple cases are like the state_three case.
        //Other code, but I don't need to assign the color.  Blue works...
}

myCALayer.backgroundColor = c; //Oh-noes!!! Here we get the dreaded EXC_BAD_ACCESS on iPad
//...more code dealing with the layer.

Код выше работает без проблем в симуляторе. Однако, когда я запускаю приложение на iPad, оно падает на backgroundColor.

Я могу исправить это, избавившись от переменной CGColor и назначив цвет фона непосредственно в операторе switch/case, что я и планирую сделать.

Однако мне любопытно. Почему это может работать в одной среде и не работать в другой?

UPDATE

Пара моментов. Во-первых, стоит упомянуть, что это проект ARC, использующий Xcode 4.2, предназначенный для устройств iOS 5. Кроме того, мой код назначения цветов не совсем то, чем он выглядит, потому что у меня есть ряд определений, которые я использую для установки этих цветов, потому что на них есть ссылки во всем моем приложении.

Вот как выглядят некоторые из #define утверждений:

#define BLUE  [UIColor colorWithRed:8.0/255.0 green:80.0/255.0 blue:150.0/255.0 alpha:1.0].CGColor
#define GREEN (UIColor.blueColor.CGColor)
//...and there are about 6 other colors

Я попытался упростить свой код, потому что компилятор должен заменить ссылки на мои ссылки на мои defines. Тем не менее, на всякий случай об этом стоит упомянуть.

8
задан Slipp D. Thompson 4 October 2015 в 20:02
поделиться