Неизвестный тип __lldb_autogen_pair в выходных данных отладчика
Я загружаю JSON с сервера, и нашел очень странное имя типа, и не знаю, что с этим делать
Что значит struct _lldb_autogen_pair
значит, и почему это там, когда JSON:
Оригинал:
{
"2011.10.06": [
{
"place":"home",
"role":0,
"title":"abc"
}
],
}
ОБНОВЛЕНИЕ У меня есть одноэлементный подкласс AFHTTPRequestOperationManager, поэтому я делаю
client = [[VZWebClient alloc] initWithBaseURL:[NSURL URLWithString:kVZWebClientHostName]];
client.responseSerializer = [AFJSONResponseSerializer serializer];
в NSLOG все нормально без сюрпризов
2 ответа
Вы смотрите на содержимое NSDictionary. Контейнер логически состоит из пар ключ ==> значение.
Однако, если вы посмотрите на представление словаря в памяти, оно просто хранит последовательность указателей объектов, например что-то вроде
0x123 (key)
0x456 (value)
0x356 (key)
0x577 (value)
...
Если вы LLDB, вам нужно найти способ сгруппировать каждый ключ по его значению. В C++ это простая проблема, потому что у вас есть std::pair<>, которую вы можете использовать (а C++ std::map<> стремится использовать этот тип для внутреннего хранения записей, так что вы получаете группировку бесплатно). В ObjC вам нужно что-то, что позволит вам осуществить эту группировку.
Поэтому мы создаем фальшивый тип __lldb_autogen_nspair, который по сути сводится к
struct __lldb_autogen_nspair { id key; id value; };
и мы представляем NSDictionary как контейнер этих структур.
Название в значительной степени означает "эй, это деталь реализации LLDB, не беспокойтесь об этом".
__lldb_autogen_pair
это частный тип данных, используемый в качестве промежуточного представления NSDictionary
пары ключ / значение отладчиком LLDB. На самом деле это не часть этого значения, а нечто, генерируемое отладчиком, чтобы вы могли проверить его в этом интерфейсе.
Двойное подчеркивание (__
) префиксы условно обозначают закрытый тип, и вам не о чем беспокоиться.