NSKeyedArchiver фактически не кодирует объекты. Он просто просматривает график и вызывает методы кодирования каждого экземпляра в графе. Поэтому наиболее вероятный источник утечки находится внутри пользовательского метода кодера, который вы написали для архивирования одного из ваших пользовательских классов. Возможно, вы захотите сделать тестовые архивы отдельных классов, чтобы проверить, не утек ли один из них.
Проблема с использованием NSKeyedArchiver для архивирования большого сложного графа состоит в том, что весь граф помещается в память одновременно. Одна утечка в одном кодере классов может взорваться, если много экземпляров этого класса заархивировано. Если у вас более 76 000 объектов и всего несколько тысяч утечек по несколько байт каждый, это будет происходить в спешке.
Я должен добавить, что я никогда не сталкивался и даже не читал о ситуации, в которой Базовые данные не работали лучше, чем архив для сложных графиков, независимо от их размера. Базовые данные были созданы специально для решения именно такой проблемы.
Если вы пробовали Core Data, и он застрял, возможно, это потому, что вы привыкли к наследованию объектов. Поскольку базовые данные используют наследование одной таблицы на стороне хранилища в SQL, все потомки сущности оказываются в одной и той же таблице, что приводит к затруднениям. Помните, сущности отделены от классов, которые они моделируют, поэтому вы можете иметь наследование классов без наследования сущностей. Это дает вам преимущества наследования в коде без потери скорости наследования объектов.