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;
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