Включение заголовков ARC в не-ARC проект
Я сделал статическую библиотеку, которая была закодирована с использованием ARC. Я планирую распространять эту библиотеку для использования другими людьми. Я понимаю, что ничего не нужно делать для включения статической библиотеки ARC в не-ARC проект, но как насчет включения заголовочных файлов ARC? Например, заголовки для моей статической библиотеки ARC объявляют свойства как weak
а также strong
но когда я пытаюсь включить эти заголовки в не-ARC проект, компилятор выходит из себя.
Есть идеи?
1 ответ
За strong
Вы можете просто использовать retain
, Они идентичны.
weak
Это хитрее, и хотя я знаю несколько способов, которые должны работать, я не уверен, лучший способ справиться с этим.
Во-первых, убедитесь, что вам это действительно нужно. Если вы поддерживаете iOS4, вы не можете иметь weak
во всяком случае, так что вопрос спорный. У меня такое чувство, что я бы просто избегал weak
и убери все эти проблемы. слабость - это хорошо, но в большинстве случаев это не так уж и сложно.
Тем не менее, есть несколько подходов, которые будут работать. Лучше всего, наверное, объявить weak
аксессоры без свойств в шапке. Вместо этого:
@property (nonatomic, readwrite, weak) id delegate;
Сделай это:
- (id)delegate;
- (void)setDelegate:(id)aDelegate;
Тогда вы все еще можете объявить weak
свойство внутри вашего файла реализации. Кстати, для этого вызывающий абонент все еще может использовать точечную запись.
Возможно, вы получите здесь ошибку компиляции, так как setDelegate:
технически занимает __strong id
, Если это так, просто ручной инструмент setDelegate:
- (void)setDelegate:(id)aDelegate {
_delegate = aDelegate;
}
Не проверял это, но это должно работать. Вы также можете объявить ивар _delegate
быть __weak
в @implementation
блокировать, а не объявить его weak
имущество.
Как я и сказал; Я не проверял ничего из этого. Пожалуйста, опубликуйте свои выводы, если это работает.