2011-05-23 18 views
27

Hay tantas funciones como¿Qué es NSZone? ¿Cuáles son las ventajas de usar initWithZone :?

 
1. NSDefaultMallocZone() 
2. NSCreateZone(); 
3. NSRecycleZone(); 
4. NSSetZoneName(); 
5. NSZoneMalloc(); 
and many more related to NSZone 

¿Qué significa NSZone, dónde utilizar estas funciones y cuándo?
¿Cuáles son las ventajas de initWithZone: y cómo usarlas en mi aplicación iphone?

Respuesta

38

NSZone es la forma de optimizar la asignación de objeto y liberación de Apple. NSZone no es un objeto; es un opaco C-struct que almacena información sobre cómo se debe manejar la memoria para un conjunto de objetos .

Uno rara vez tiene que preocuparse por manejando sus propias zonas en aplicaciones ; Cacao lo maneja transparente. Un NSZone predeterminado es creado al inicio y todos los objetos predeterminados para asignarse allí. Entonces ¿por qué querrías usar la tuya propia?

Si está en serie asignación de cientos de objetos baratos, es posible el costo de realidad asignar espacio para ellos llega a ser significativa. Debido a que la zona estándar se usa todo el tiempo, puede volverse muy desigual; Los objetos eliminados pueden dejar huecos incómodos en la memoria. El asignador para el estándar NSZone lo sabe, y intenta llenar estos espacios con preferencia para obtener más memoria del sistema , pero esto puede ser costoso en el tiempo si la zona ha crecido bastante.

Si desea masa asignar objetos, a continuación, puede crear su propia zona y decir que no molestar con la búsqueda de huecos para poner nuevos objetos. El asignador ahora puede saltar al final de su memoria asignada cada vez y asignar rápidamente memoria a sus nuevos objetos , lo que ahorra mucho esfuerzo.

asignadores le puede ahorrar tiempo otra parte, también, como pedir el sistema operativo de la memoria más, que una zona tiene que hacer cada vez que se llena, es otro operación costosa si se hace mucho. Mucho más rápido es pedir grandes trozos de memoria a la vez, y usted puede decir su NSZone qué hacer aquí también.

rumorea que podría salvar NSZone que cancelación de asignación de tiempo en los viejos Días, también, con un método que simplemente mandriles de distancia toda la memoria asignada sin molestarse en llamar deallocators. Si un conjunto de objetos es autónomo, esto podría ahorrar mucho de tiempo, ya que puede tirarlos a todos de inmediato sin tediosamente desasignarlos a todos. Por desgracia, parece no ser una señal de este don del cielo en la documentación actual; el único método NSZone (NSRecycleZone?) coloca con cuidado todos los objetos en una zona en la NSZone predeterminada. No exactamente un gran ahorro de tiempo.

Por lo tanto, en resumen, las zonas le ahorran tiempo en asignaciones de masa. ¡Pero solo si los programadores saben cómo usarlos!

De CocoaDev

+8

También es importante destacar es que no se puede utilizar NSZone más si está utilizando ARC. Cuál deberías ser – Adam

+0

@ Adam, si puede agregar una cita también, creo que vale la pena agregar un comentario a la respuesta. –

+1

desde https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW11: "No puede usar zonas de memoria No hay necesidad de usar NSZone más, de todos modos, son ignorados por el moderno tiempo de ejecución Objective-C ". La documentación de las funciones de la Fundación indica que las zonas son de hecho ignoradas en iOS y en los tiempos de ejecución de OSX de 64 bits. – Norswap

Cuestiones relacionadas