実際、この-[NSHTTPURLResponse allHeaderFields]
メソッドは大文字と小文字を区別しないNSDictionaryインスタンスを返します。_CFCapitalizeHeader
これは、CFNetworkの最近のバージョンで削除された機能とは何の関係もありません。残念ながら、そのソースコードはもう利用できません。
allHeaderFields
これは、メソッド(OS X 10.8.3)の簡略化されたコールグラフです。
-[NSHTTPURLResponse allHeaderFields] -- Foundation
CFHTTPMessageCopyAllHeaderFields() -- CFNetwork
HTTPMessage::copyAllHeaderFields(__CFArray const**)
MixedDict::copyAsOrdinaryDict(__CFAllocator const*, __CFArray const**) const
CFDictionaryCreateMutable()
allHeaderFields
このディクショナリは、メソッドの結果として最終的に返されます。渡される3番目のパラメーターCFDictionaryCreateMutable
は次のようになります。
version = 0
retain = _keyRetain(__CFAllocator const*, void const*) // __ZL10_keyRetainPK13__CFAllocatorPKv
release = _keyRelease(__CFAllocator const*, void const*) // __ZL11_keyReleasePK13__CFAllocatorPKv
copyDescription = _keyCopyDescription(void const*) // __ZL19_keyCopyDescriptionPKv
equal = _keyEqual(void const*, void const*) // __ZL9_keyEqualPKvS0_
hash = _keyHash(void const*) // __ZL8_keyHashPKv
_keyEqual
C ++メソッドは、最終的にオプションCFStringCompare
を使用して呼び出しkCFCompareCaseInsensitive
ます。
これが、NSHTTPURLResponseヘッダーの大文字と小文字の区別を気にしない理由です。
ただし、この動作が文書化されていないことは非常に残念です。レーダー#13715902を複製して文書を求めてください。