NSJSONSerialization generando NSCFString * y NSTaggedPointerString *

La ejecución de NSJSONSerialization en el siguiente json a veces me da NSCFString * y, a veces NSTaggedPointerString * en los valores de cadena. ¿Alguien sabe por qué este es el caso y qué NSJSONSerialization usa para determinar qué tipo regresa?

jsonData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&parseError]; { "UserPermissionsService": { "ServiceHeader": {}, "UserApplicationPermissions": { "ApplicationPermissions": { "ApplicationID": "TEST", "Permission": [ { "Locations": [ "00000" ], "PermissionID": "LOGIN" }, { "Locations": [ "00000" ], "PermissionID": "SALES_REPORT_VIEW" } ] } } } } 

"LOGIN" vuelve como un NSTaggedPointerString *. "SALES_REPORT_VIEW" regresa es un NSCFString *. Esto está teniendo un impacto hacia abajo donde estoy usando y lanzando los valores.

ACTUALIZAR

Esto es lo que aprendí …

"NSTaggedPointerString resulta cuando todo el valor se puede mantener en el puntero mismo sin asignar ningún dato".

Hay una explicación detallada aquí …

https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html

Como NSTaggedPointerString es una subclass de NSString que muestra comillas / no muestra comillas, nunca debería haber sido un problema para mí, ya que se utilizan los datos.

Gracias por todos los que comentaron. Me siento cómodo. Entiendo lo que hace NSJSONSerialization.