NSPointerFunctionsCopyIn confusion
Frecuentes
Visto 140 veces
1
Traté de agregar un NSDate
objetar a mi NSPointerArray
configurado con (NSPointerFunctionsCopyIn
) opción:
NSDate *today= [NSDate date];
NSPointerArray *p_arr = [NSPointerArray pointerArrayWithOptions:NSPointerFunctionsCopyIn];
[p_arr addPointer:(void *)today];
// comparing addresses;
NSLog(@" Addresses are: %p , %p " , today , [p_arr pointerAtIndex:0]);
//Addresses are:0x1004005d0 , 0x1004005d0
pero como sé con "NSPointerFunctionsCopyIn", el objeto en mi matriz de punteros debe ser una copia nueva, no un objeto compartido.
1 Respuestas
1
Como se explica en
Preguntas y respuestas del viernes 2010-05-28: clases de colección de leopardo, el NSPointerFunctionsCopyIn
opciones hace que los punteros de objeto se "copien" usando el
NSCopying
protocolo. Esto no significa necesariamente que se crea un nuevo objeto.
En el caso de los inmutable objetos (comoNSDate
), NSCopying
pueden implementarse conservando el original en lugar de crear una nueva copia. Y esto es lo que sucede en tu caso:
NSDate *today = [NSDate date];
NSDate *today2 = [today copy];
NSLog(@"%p %p", today, today2);
// Output: 0x1001040f0 0x1001040f0
Respondido el 03 de diciembre de 13 a las 11:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ios objective-c or haz tu propia pregunta.
en ese caso, ¿cuál es la diferencia entre "NSPointerFunctionsStrongMemory" y "NSPointerFunctionsCopyIn" porque ambos conservarán el nuevo objeto agregado? - encenderse
Según tengo entendido, esas opciones son independientes entre sí. "NSPointerFunctionsStrongMemory" es una "opción de memoria" y significa (en relación con el valor predeterminado "NSPointerFunctionsObjectPersonality") que el objeto se conserva. Causas de "NSPointerFunctionsCopyIn"
copyWithZone
para ser llamado en el objeto.copyWithZone
podría devolver un nuevo objeto o simplemente retener el objeto pasado (consulte la documentación del protocolo NSCoping). Si prueba su código con un NSMutableString, obtendrá un objeto diferente. - Martin R@user3061088: ¿Qué es exactamente lo que te preocupa? Un objeto NSDate no se puede mutar, por lo que no debería importar si obtiene un puntero al objeto original o un puntero a un nuevo objeto. - Martin R
Entendí el punto, si agrego un objeto mutable, creará un nuevo objeto, pero si agrego uno inmutable, conservará el anterior, gracias amigo. encenderse