Jus*_*itz 18 json objective-c nsstring foundation nsjsonserialization
在以下json上执行NSJSONSerialization有时会给我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"
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
"LOGIN"以NSTaggedPointerString*的形式返回."SALES_REPORT_VIEW"返回的是一个NSCFString*.这对我正在使用和投射值的下游产生影响.
UPDATE
这是我学到的......
"当整个值可以保存在指针本身而不分配任何数据时,会产生NSTaggedPointerString."
这里有一个详细的解释......
https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html
由于NSTaggedPointerString是NSString的子类,因此显示引号/不显示引号对我来说永远不会成为问题,因为使用了数据.
感谢所有评论的人.我很自在地理解NSJSONSerialization在做什么.
Foundation 的大部分内容都是作为类集群来实现的。TL;DR 您将其作为 NSString 进行交互,但基金会将更改支持实现,以根据实际内容优化某些性能或空间特征。
如果你好奇的话,基金会团队之一在此处转储了 iOS 11 的类集群列表
| 归档时间: |
|
| 查看次数: |
3373 次 |
| 最近记录: |