2011-12-08 10 views
6

En iOS 5, "mantener" y "liberar" no se admiten más. En cambio, "fuerte" y "débil" son la nueva forma.IOS5 @property cambia

iOS 4 código:

@property(nonatomic, retain) 
@property(nonatomic, assign) 

iOS 5 código:

??? 
??? 

Respuesta

12

"En iOS 5, retener la liberación no se admiten más" Lo son, simplemente no cuando se usa ARC.

Cuando se usa ARC, -[<NSObject> retain] es un no-op.

Para las propiedades, puede usar strong si usa ARC pero eso no es obligatorio (también puede usar retain si lo desea). strong y retain son idénticos:

@property(nonatomic, strong) 
@property(nonatomic, assign) 

Sólo asegúrese de que usted es constante (no usar tanto strong y retain en el mismo proyecto).

+0

Por cierto, el equipo de Objective-C hizo para ser compatible con el código antiguo esto. –

+0

¿Alguna razón seria para no usar ambos elementos fuertes/retener juntos? ¿Es solo una cuestión de legibilidad? –

+0

@craig básicamente. Creo que puede ser confuso para las personas nuevas en ARC. –

5

Ellos no son exactamente lo mismo, pero básicamente retain := strong y assign := weak que sugeriría un vistazo a las ARC Release notes

+3

En realidad, 'assign' está más cerca de' unsafe_unretained' que 'weak'. Las asignaciones de propiedades débiles son un concepto nuevo. –

+2

También tenga en cuenta que débil no funcionará para tipos primitivos como int. Tienes que usar asignar. –

4

nonatomic estados de la característica de que el objeto no es hilo de seguridad que significa que si un subproceso diferente intenta acceder a este objeto que cosas malas pueden suceder, pero esto es mucho más rápido que la propiedad atómica.

strong se utiliza con ARC y que básicamente le ayuda, al no tener que preocuparse de la cuenta de retención de un objeto. ARC lo libera automáticamente cuando haya terminado con él. Usar la palabra clave strong significa que posee el objeto.

weak propiedad significa que usted no es el propietario y solo hace un seguimiento del objeto hasta que el objeto al que se le asignó se mantenga, tan pronto como se libera el segundo objeto, pierde valor. Por ej. obj.a=objectB; se usa y tiene una propiedad débil, de lo que su valor solo será válido hasta que el objeto B permanezca en la memoria.

copy propiedad está muy bien explicado aquí https://stackoverflow.com/a/5002646/919545

strong,weak,retain,copy,assign son excluyentes entre sí por lo que no se pueden utilizar en un solo objeto ... leer la sección "propiedades declaradas" de http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

esperanza de que esto ayude que un poco ...