Если вашему API действительно нужно 20 параметров, используйте 20 параметров.Если имеет смысл объединить некоторые или все эти параметры в пользовательский объект, во что бы то ни стало, сделайте это, но не создавайте пользовательский объект только ради уменьшения списка параметров.В качестве простого примера, если метод берет координаты точки (x, y, z), вполне законно создать объект для моделирования точки и передать его в качестве единственного параметра.Вы не должны создавать объекты, единственной целью которых является моделирование списка параметров API.
Я бы использовал подход NSDictionary только в том случае, если у меня действительно есть расширяемый набор пар ключ-значение, все из которых действительно являютсянеобязательный.Причина, по которой он не используется в других ситуациях, состоит в том, что если программист, использующий API, пропускает обязательный параметр, ошибка не может быть обнаружена до времени выполнения.Список параметров, явно именующий каждый параметр, позволяет компилятору обнаруживать пропуски.
Идея о том, что число параметров API должно быть ограничено произвольным небольшим значением, является полностью поддельным.API должен принимать столько параметров, сколько ему нужно.