Я не программист Objective-C, но обычно наборы реализуются через хеш-таблицы, которые (если все сделано правильно) будут давать O (1) для вставки, удаления и поиска.
Технически, хэши обычно дают вам O (M), где M - размер ключа, но для набора вы просто используете идентификатор объекта ключа, который является постоянным, поэтому вы возвращаетесь к O 1).