Неизвестный тип __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. На самом деле это не часть этого значения, а нечто, генерируемое отладчиком, чтобы вы могли проверить его в этом интерфейсе.

Двойное подчеркивание (__) префиксы условно обозначают закрытый тип, и вам не о чем беспокоиться.

Другие вопросы по тегам