L'esecuzione di NSJSONSerialization sul seguente json a volte mi dà NSCFString * e talvolta NSTaggedPointerString * su valori stringa. Qualcuno sa perché questo è il caso e cosa usa NSJSONSerialization per determinare quale tipo restituisce?NSJSONSerializzazione che genera NSCFString * e NSTaggedPointerString *
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" torna come NSTaggedPointerString *. "SALES_REPORT_VIEW" ritorna è un NSCFString *. Questo sta avendo un impatto a valle dove sto usando e gettando i valori.
UPDATE
Ecco quello che ho imparato ...
"NSTaggedPointerString risulta quando l'intero valore può essere conservato in puntatore stesso senza allocare i dati."
C'è una spiegazione dettagliata qui ...
https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html
Dal NSTaggedPointerString è una sottoclasse di NSString mostrando citazioni/non mostrano citazioni dovrebbero mai stato un problema per me come vengono utilizzati i dati.
Grazie per tutti quelli che hanno commentato. Sto bene capisco cosa sta facendo NSJSONSerialization.
Che cosa stai facendo che si fa la differenza? Ottieni sempre un NSString *. Quale sottoclasse di NSString * non dovrebbe mai importarti. – gnasher729
Google per NSTaggedPointerString. Se questo fa la differenza per te, allora stai facendo qualcosa di molto, molto sbagliato. Puntatori con tag sono molto comuni su sistemi a 64 bit per valori piccoli in cui l'intero valore può essere mantenuto nel puntatore stesso senza allocare alcun dato. – gnasher729
Un esempio è che quando viene visualizzato nell'interfaccia utente (scritto in un campo UIText), NSTaggedPointerString * non ha virgolette attorno mentre NSString * ha delle virgolette intorno. –