Comencé a desarrollar mi primera aplicación para iOS con Xcode 4.2 y tenía como objetivo iOS 5.0 con una plantilla de "aplicación de utilidad" (la que viene con un FlipsideViewController).
Leí que dado que ARC es una función de tiempo de compilación, también debería ser compatible con iOS 4, así que intenté orientar mi aplicación a 4.3 e intentar compilarla. Cuando lo hago, aparece este error:
FlipsideViewController.m: error: Recuento automático de referencias Problema: el destino de implementación actual no admite referencias __ débiles automatizadas
Hace referencia a esta línea:
@synthesize delegate = _delegate;
Esa variable se declara como:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
Entiendo que las "referencias débiles" no son compatibles con iOS 4, pero realmente no entiendo por qué querría usar una referencia débil para empezar, ni puedo averiguar cómo reescribiría las cosas para evitar usarlas, mientras todavía aprovechando ARC (después de todo, se supone que funciona con iOS 4 y 5, ¿verdad?)
fuente
unsafe_unretained
es compatible con iOS 4.xy 5.0, por lo que le brinda compatibilidad con versiones anteriores. Si estaba haciendo una compilación de solo 5.0, puede cambiar aweak
para aprovechar la seguridad adicional que le brinda.@autoreleasepool
(en ARC, NSAutoreleasePool para implementaciones más antiguas contadas manualmente).Si solo usa referencias débiles para mayor seguridad, llame manualmente a las nuevas funciones de tiempo de ejecución si están disponibles y, si no, recurra a la asignación simple de
__unsafe_unretained
variables.ZWRCompatibility.h simplificará esto un poco.
fuente
Gracias a la biblioteca de compatibilidad PLWeakCompatibilty de Mike Ash , ahora también puede usar __weak en iOS 4.x.
Es increíblemente fácil de configurar y no requiere consideración o esfuerzo adicional sobre 5.x.
fuente