Ошибка компилятора LLVM 3.0: приведение типа указателя C к типу указателя Objective-C 'id' требует мостового преобразования - PullRequest
2 голосов
/ 24 июля 2011

Я пытаюсь скомпилировать старый проект приложения для iPhone, используя новый компилятор LLVM 3.0. Я получаю эту ошибку:

Проблема с автоматическим подсчетом ссылок: приведение типа указателя C 'CGColorRef' (он же struct CGColor * ') к указателю типа Objective C' id 'требует параллельного преобразования [4]

для кода:

UIColor *color1, *color2, *color3, *color4;

....

NSArray *colors =  [NSArray arrayWithObjects:(id)color1.CGColor, color2.CGColor, color3.CGColor, nil];

Этот код без проблем компилируется в более старом компиляторе LLVM GCC 4.2. В чем причина этого? Какие важные вещи нужно изучить при переходе на компилятор LLVM 3.0?

1 Ответ

11 голосов
/ 24 июля 2011

Это потому, что вы используете режим ARC компилятора (автоматический подсчет ссылок). Чтобы ARC успешно статически отслеживал количество ссылок объектов, которые пересекают бесплатные мосты (Foundation to Cocoa и наоборот), вы должны сообщить ему, что рассмотрели ситуацию. В общем, либо отключите ARC, либо прочитайте Документация ARC о приведениях , чтобы выбрать подходящее решение.

Однако здесь у вас есть большая проблема. CGColorRef (тип UIColorInstance.CGColor) имеет значение , а не без взимания платы с мостом типа Какао, и поэтому его нельзя безопасно преобразовать в id. Почему бы просто не хранить UIColor?

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