Usa una variable estática dentro de una categoría de Objective-C

Quiero poder hacer lo siguiente:

NSString *hoursAndMinutes = [myNSDateObject formattedTime]; // eg. 10:25 

Ahora puedo crear una categoría en la class NSDate , pero como la creación de NSDateFormatter ha demostrado ser bastante costosa, quisiera utilizar una sola instancia de mi NSDateFormatter . ¿Esto es una contradicción a la noción de categorías o hay una manera más limpia de lograr esto?

Las categorías solo le permitirán mantener variables estáticas. Pero para su instancia, eso funcionaría perfectamente.

Cree una categoría para su formateador como sea

Encabezamiento

 @interface NSDateFormatter (myFormats) + (NSDateFormatter*) specialFormatting; @end 

Archivo de implementación

 @implementation NSDateFormatter (myFormats) + (NSDateFormatter*) specialFormatting{ static NSDateFormatter *_specialFormatting; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _specialFormatting = [[NSDateFormatter alloc] init]; // Continue Setting up this format; }); return _specialFormatting; } @end 

Luego, asegúrese de include su encabezado donde desea usar esto (uso el file prefix.pch para include cosas que uso todo el time)

entonces no tendrá que declararlo y puede usarlo desde donde está. Y el artículo no se creará cada vez que lo necesite …

El object nunca se libera. pero eso es lo que deseas de todos modos. ya que todavía es accesible, no es una pérdida de memory.

También puede proporcionar methods de ayuda que le permitirán recuperar la cadena.

Espero que ayude.

Puede usar una variable estática para eso (ya sea en el scope del file o en el scope del método) o puede ajustar su NSDateFormatter dentro de un singleton para usar de la categoría.

No diría que esto contradiga la noción de categoría, pero seguramente el uso de variables estáticas o singletons no siempre es lo mejor para muchos progtwigdores.

También puede crear variables estáticas dentro de los methods.