Я хотел бы знать, когда не следует использовать Transformable, но вместо этого следует создать другую сущность и использовать отношение To-many.
Вы должны использовать трансформируемые атрибуты только тогда, когда вам абсолютно необходимо,Это не удобство или кратчайший путь, а необходимость в некоторых ресурсах.
Вы редко используете Базовые Данные для хранения структур данных, таких как массивы или словари, потому что Базовые Данные в основном используются не для хранения / постоянного хранения.а скорее для моделирования / симуляции.Для моделирования данных бесполезно превращать структуру данных в большой, не требующий логики блог данных.
Преобразуемые атрибуты обычно используются для хранения некоторого класса, который сам активно управляет данными, которые он хранит, например, для преобразования UIImage, чтобы вы могли получить UIImage прямо из хранилища UI и вернуть его обратно целиком.
В ответ на ваш главный вопрос:
Мне более интересно узнать, насколько большими могут быть данные, пока они не повлияют на производительность, и лучше их нормализовать.
Это зависит в основном от комбинации размера и сложности.Всякий раз, когда вы преобразуете кучу существующих объектов в большой двоичный объект, вам необходимо преобразовать весь блог.Таким образом, если вы сохраняете массив 1 Мб путем преобразования, вы получаете массив 1 Мб обратно в память при запуске обратного преобразования.Каждое преобразование, независимо от того, насколько оно мало, требует больше времени на обработку, чем доступ к обычному атрибуту или даже поиск другого управляемого объекта.Следовательно, наличие большого количества небольших преобразований, к которым часто обращаются, также приведет к значительному снижению производительности.
Лучше всегда лучше разложить большие куски данных на сущности, атрибуты и отношения.Это дает вам всю гибкость и оптимизацию Core Data бесплатно.Я использую Core Data вместо массивов и словарей, потому что как только вы по-настоящему обернетесь вокруг Core Data, его будет проще использовать.
Я бы никогда не использовал Core Data для хранения преобразованного массива строк или чего-либо подобного.Если в строках нет логики, а их всего несколько десятков, вы можете записать массив в файл plist.Это будет быстрее и проще, чем возиться с трансформируемым атрибутом.