在下面的json上執行NSJSONSerialization有時會給我NSCFString *,有時會給字符串值帶上NSTaggedPointerString *。有誰知道爲什麼會出現這種情況,以及NSJSONSerialization用於確定返回哪種類型?NSJSONSerialization生成NSCFString *和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」作爲NSTaggedPointerString *返回。 「SALES_REPORT_VIEW」返回是一個NSCFString *。這對我正在使用和投射值的下游產生影響。
UPDATE
這裏就是我了...
「NSTaggedPointerString結果時,整個價值可以保持在指針本身沒有分配任何數據。」
這裏有一個詳細的解釋...
https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html
由於NSTaggedPointerString是的NSString的報價顯示的子類/隨着數據使用沒有顯示行情應該從來都不是我的問題。
感謝大家的評論。我很舒服我明白NSJSONSerialization在做什麼。
你在做什麼,它有差別的類集羣的列表?你總是得到一個NSString *。 NSString *的哪個子類不應該對你有影響。 – gnasher729
Google for NSTaggedPointerString。如果這對你有所作爲,那麼你正在做一些非常非常錯誤的事情。帶標記的指針在64位系統上對於小數值很常見,其中整個值可以保存在指針本身中而不分配任何數據。 – gnasher729
一個例子是,當在UI中顯示(寫入UITextField)時,NSTaggedPointerString *周圍沒有引號,而NSString *確實有引號。 –