guide basics objective-c properties automatic-ref-counting nsmanagedobject retain

objective-c - basics - swift reference



@property definiciones con ARC: fuerte o retener? (4)

Usando Xcode 4.2 y ARC, veo que el código generado automáticamente para un NSManagedObject todavía se lee así para las propiedades:

@property (nonatomic, retain) NSString * someString;

1) ¿No debería retain ahora ser reemplazado por strong o weak ?

2) ¿Por qué el código autogenerado sigue usando retain

3) ¿Cuál es el reemplazo correcto para retain en esta declaración de propiedad?

Actualmente estoy depurando un problema usando NSFetchRequest , y pensé que esta podría ser la fuente del problema. ¿Pensamientos?


1) ¿No debería retener ahora ser reemplazado por fuerte o débil?

No. No puede reemplazar retener con débil; ellos son diferentes. Y strong es un 100% sinónimo de retener; ellos son idénticos Puedes usar cualquiera, entonces no hay "debería" aquí. Puede reemplazar retener con fuerte si lo desea, pero no es necesario.

2) ¿Por qué el código autogenerado sigue usando retener

Por qué no? Ver (1). retener es correcto, así que no hay problema.

3) ¿Cuál es el reemplazo correcto para retener en esta declaración de propiedad?

No hay necesidad de reemplazar retener.

Actualmente estoy depurando un problema usando NSFetchRequest, y pensé que esta podría ser la fuente del problema. ¿Pensamientos?

No lo es


"retener" es igual a "fuerte".

"fuerte" se usa, por ejemplo:

@property (nonatomic, strong) NSString * someString;

Y "__strong" se usa, por ejemplo:

-(void) someMethod { __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"]; }

En Apple Docs. dice:

Atributos de propiedad

Las palabras clave débil y fuerte se introducen como nuevos atributos de propiedad declarados, como se muestra en los siguientes ejemplos.

// The following declaration is a synonym for: @property(retain) MyClass *myObject; property(strong) MyClass *myObject;

Apple doc. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html


Antes de ARC, debe ''liberar'' un objeto que se conserva. Eso significa retener tiene contraparte. Después de ARC no necesita liberar. Entonces usa fuerte Es una pista visual de que no es necesario llamar al lanzamiento.


Para responder a las tres preguntas en una: retain y strong son sinónimos entre sí, por lo que ambos son correctos. La documentación indica

retain implica __strong ownership

strong implica __strong strong