Incluyendo cabeceras ARC en proyectos que no son ARC

Hice una biblioteca estática que fue codificada usando ARC. Planeo distribuir esta biblioteca para que otras personas la usen. Entiendo que no es necesario hacer nada para include una biblioteca estática ARC en un proyecto que no sea ARC, pero ¿qué pasa con la inclusión de los files de encabezado ARC? Por ejemplo, los encabezados de mi biblioteca estática ARC declaran que las properties son weak y strong pero cuando trato de include estos encabezados en un proyecto que no es ARC, el comstackdor se asusta.

¿Algunas ideas?

Para strong , puedes usar retain . Son idénticos

weak es más complicado y, aunque conozco varias forms en que debería funcionar, no estoy seguro de la mejor manera de manejarlo.

Primero, asegúrate de que realmente lo necesitas. Si está soportando iOS4, no puede tener weak todos modos, por lo que el problema es discutible. Mi corazonada es que probablemente solo evite weak y que todos estos problemas desaparezcan. débil es bueno, pero no es tan importante evitar en la mayoría de los casos.

Dicho esto, hay algunos enfoques que funcionarán. Lo mejor es probablemente declarar accesores weak sin properties en el encabezado. En lugar de esto:

 @property (nonatomic, readwrite, weak) id delegate; 

Hacer esto:

 - (id)delegate; - (void)setDelegate:(id)aDelegate; 

A continuación, puede declarar una propiedad weak dentro de su file de implementación. La persona que llama todavía puede usar la notación de puntos para esto, BTW.

Es posible que obtenga un error de compilation aquí, ya que setDelegate: técnicamente lleva un __strong id . Si ese es el caso, simplemente hand-implement setDelegate:

 - (void)setDelegate:(id)aDelegate { _delegate = aDelegate; } 

No lo he probado, pero eso debería funcionar. También puede declarar que ivar _delegate es __weak en el bloque @implementation lugar de declararlo como una propiedad weak .

Como dije; No he probado nada de esto. Publique sus conclusiones si funciona.