次のjsonでNSJSONSerializationを実行すると、文字列値にNSCFString *とNSTaggedPointerString *が渡されることがあります。 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"
}
]
}
}
}
}
"LOGIN"はNSTaggedPointerString *として返されます。 "SALES_REPORT_VIEW"はNSCFString *です。これは下流で私が使用している値にキャストしているところに影響を与えています。
UPDATE
は、ここで私が学んだものだ...
「NSTaggedPointerStringは全体の値が任意のデータを割り当てずに、ポインタ自体に保つことができる場合に生じます。」データが使用されているよう
NSTaggedPointerStringが/引用符を引用符を示すのNSStringのサブクラスで表示されていないのであり、ここで詳細な説明は...だ
https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html
は私にとって問題ではありません。
コメントありがとうございました。私はNSJSONSerializationがやっていることを理解しています。
のように、クラスクラスタのリストをダンプ?あなたは常にNSString *を取得します。 NSString *のどのサブクラスであってもあなたに関係するべきではありません。 – gnasher729
Google for NSTaggedPointerString。これがあなたに差をつけたら、あなたは非常に間違ったことをしています。タグ付きポインタは、64ビットシステムでは、小さな値に対して非常に一般的です。ここでは、データ全体を割り当てずに値全体をポインタ自体に保持できます。 – gnasher729
1つの例として、UITextFieldに書き込まれたUIで表示すると、NSTaggedPointerString *の周りに引用符が付きませんが、NSString *には引用符が付いています。 –