NSString retainCount es 2147483647

Posibles duplicados:
NSString retiene el conteo
La propiedad Objective C NSString * conserva el recuento de rarezas
Cuándo usar -retainCount?

¿Por qué este código muestra el valor retener mayor que 1? ¿Y por qué es 2147483647?

NSString *data22 = [[NSString alloc] initWithString:@"fsdfsfsdf"]; int a = [data22 retainCount]; NSLog(@"retain count 1== %d ====" ,a); 

La salida del código anterior es

  retain count 1== 2147483647 ==== 

Es 2147483647 porque miraste. No mires y será el valor que esperas.

Seriamente. No llame a retainCount . Jamas. Es inútil.

Por qué es un número tan ridículo es debido a un detalle de implementación. @ “…” es una cadena constante. NSString puede reconocer cadenas constantes y decide que su código particular no necesita una segunda copia que consume espacio de una cadena constante inmutable y, por lo tanto, devuelve la cadena constante ya existente.

Es decir, un singleton. De una clase cuyas instancias solo han sido creadas por el comstackdor. Para lo cual, conservar / liberar / liberar automáticamente / retenerCount están completamente desprovistos de significado.

En cuanto a por qué es 2147483647, una imagen vale más que mil palabras. O, en este caso, 31 bits configurados. uno negativo expresado en demasiados dígitos