Я начал разрабатывать свое первое приложение для iOS с Xcode 4.2 и ориентировался на iOS 5.0 с помощью шаблона «служебного приложения» (того, который поставляется с FlipsideViewController).
Я читал, что, поскольку ARC - это функция времени компиляции, она также должна быть совместима с iOS 4, поэтому я попытался настроить свое приложение на 4.3 и попробовать его скомпилировать. Когда я это сделаю, я получаю такую ошибку:
FlipsideViewController.m: ошибка: автоматический подсчет ссылок. Проблема: текущая цель развертывания не поддерживает автоматические __ слабые ссылки.
Ссылка на эту строку:
@synthesize delegate = _delegate;
Эта переменная объявлена как:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
Я понимаю, что «слабые ссылки» не поддерживаются в iOS 4, но я действительно не понимаю, почему я хотел бы использовать слабую ссылку для начала, и я не могу понять, как бы я переписал вещи, чтобы избежать ее использования, в то время все еще пользуется преимуществами ARC (в конце концов, он должен работать с iOS 4 и 5, верно?)
источник
unsafe_unretained
поддерживается как в iOS 4.x, так и в 5.0, поэтому обеспечивает обратную совместимость. Если вы делали сборку только для 5.0, вы могли бы переключиться на,weak
чтобы воспользоваться дополнительной безопасностью, которую она дает.@autoreleasepool
(в ARC, NSAutoreleasePool для более старых реализаций с подсчетом ссылок вручную).Если используются только слабые ссылки для дополнительной безопасности, вручную вызывайте новые функции времени выполнения, если они доступны, и переходите к простому назначению
__unsafe_unretained
переменных, если нет.ZWRCompatibility.h несколько упростит это.
источник
Благодаря библиотеке совместимости PLWeakCompatibilty Майка Эша теперь вы можете просто использовать __weak и в iOS 4.x.
Его невероятно легко настроить, и он не требует дополнительных усилий или усилий по сравнению с 5.x.
источник