Проблема в том, что вы смешиваете конструкцию, нарушающую ARC, в файлы ARC'd посредством включения. Вы не можете применить -fno-objc-arc
к одному файлу заголовка, потому что это не имеет смысла.
Поскольку в файле заголовка вам необходимо использовать #if прагма для переключения между режимами поведения в зависимости от того, компилируется ли файл ARC или не ARC .m.
Лучшее решение, однако, должно устранить проблему полностью как для ARC, так и для ARC. Учитывая эту декларацию, она в значительной степени должна быть переменной экземпляра (хотя она может быть в структуре).
Если это ивар, полностью избавитесь от декларации. Либо выпустите его через @property
, либо переместите его в файл .m
, если он не должен отображаться в вашем общедоступном API. Учитывая тип, это действительно должно быть частная деталь реализации с публичным API, который делает доступ к содержимому немного меньше волшебства указателя.
В общем, использование языковых массивов C - массивы указателей - для хранения типов Objective-C настоятельно рекомендуется. Если _controls
нужно обнародовать как общедоступную вещь (общедоступную для других классов в вашем проекте), то реорганизуйте свой код для использования класса коллекции (т. Е. Как правило, открытый гейтер NSArray*
с внутренним хранилищем NSMutableArray*
- например, subviews
на UIView
, например).
вы можете как можно меньше указать строку ошибки – Ushan87
try id _controls; без * – Ushan87
Если вы установили '-fobjc-arc' только для файлов SBJson, почему ваш код' id * _controls; 'скомпилирован с ARC? –