执行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"
}
]
}
}
}
}
"
LOGIN"返回的是NSTaggedPointerString*。"SALES_REPORT_VIEW"返回的是NSCFString*。这会影响到我在使用和转换值时的下游操作。
更新
我了解到...
"当整个值可以保持在指针本身中而不需要分配任何数据时,就会出现NSTaggedPointerString。"
这里有一个详细的解释...
"https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html
由于NSTaggedPointerString是NSString的子类,因此在使用数据时,显示引号/不显示引号对我来说永远不应该成为问题。
感谢所有发表评论的人。我很满意我理解了NSJSONSerialization正在做什么。