Выполнение NSJSONSerialization в следующем json иногда дает мне NSCFString *, а иногда и NSTaggedPointerString * для строковых значений. Кто-нибудь знает, почему это так и что NSJSONSerialization использует, чтобы определить, какой тип он возвращает?
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"
}
]
}
}
}
}
"ВХОД" возвращается как NSTaggedPointerString *. Возвращается "SALES_REPORT_VIEW" - это NSCFString *. Это оказывает влияние вниз по течению, где я использую и выдаю значения.
UPDATE
Вот что я узнал...
"NSTaggedPointerString приводит к тому, что все значение может храниться в самом указателе без выделения каких-либо данных.
Вот подробное объяснение здесь...
https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html
Поскольку NSTaggedPointerString является подклассом NSString, показывающим кавычки/не отображающие кавычки, никогда не должен был быть проблемой для меня, поскольку данные используются.
Спасибо всем, кто прокомментировал. Мне удобно, я понимаю, что делает NSJSONSerialization.