2011-06-30 10 views
44

He subido al carro de ARC. En el pasado yo tendría mis propiedades delegados declararon como esto:cómo usar delegados con Cuenta de referencia automática

@property(assign) id<MyProtocol> delegate; 

Así que pensé que iba a hacer esto bajo ARC:

@property(weak) id<MyProtocol> delegate; 
No

manera. En la declaración @synthesize en el .m Tengo un error de compilación :

* cuestión semántica: Existente Ivar 'delegado' de la propiedad __weak 'delegado' debe ser __weak *

me lo han declarado como débil ¡aunque! Además, ¿cómo paso una clase implementando un protocolo a una propiedad débilmente referenciada? ¿Tengo que envolverlo en una de esas extrañas llamadas obj_unreinidas?

Cualquier ayuda en esto sería muy apreciada.

+2

ARC puede discutirse públicamente. iOS 5 API específica no puede. – bbum

+0

La implicación es que iOS 5 es compatible con GC Obj-C, que es presumiblemente confidencial a menos que Apple lo haya anunciado (no sé si lo han hecho; he estado demasiado ocupado para mantener el ritmo). –

Respuesta

65

"ivar" significa "variable de instancia", que no ha mostrado. Estoy apostando que se ve algo como esto:

@interface Foo : NSObject { 
    id delegate; 
} 

@property (weak) id delegate; 

Lo que el error está diciendo es que debe tener este aspecto:

@interface Foo : NSObject { 
    __weak id delegate; 
} 

@property (weak) id delegate; 

Si la propiedad dice ser débil, el Ivar que el valor termina siendo almacenado en debe ser débil también.

+43

O simplemente podría eliminar el ivar por completo y dejar que la línea '@ sintetizar' maneje eso también para usted. :) –

+3

su suposición era correcta. Y DaveDelong: ¿me estás diciendo que durante 1,5 años he estado escribiendo iOS con ivars en el encabezado, así como la declaración @property y no necesito ivar cuando sintetizo? esto es increíble jaja! ¡Gracias! –

+2

@Mike no te sientas mal. La capacidad de hacer ese tipo de acreción entre arquitecturas y acopladores en el último año +. Ahora está completo, sin embargo. – bbum

Cuestiones relacionadas