Несколько вопросов здесь:
(1) Если вы беспокоитесь о производительности сеттера, вам не следует использовать -isEqualToString: в вашем сеттере. Вместо этого сделайте сравнение указателя, потому что это все, что имеет значение в этом контексте.
(2) Если у вас есть атрибут NSString, вы должны копировать на множестве. Копия бесплатна для неизменных строк и сохранит ваш бекон для изменяемых строк (предотвращая изменение строки вызывающей стороной из-под вас).
(3) Опять с производительностью; Вы проверили на равенство, но затем используйте авто-релиз. Это влечет за собой ненужные накладные расходы.
(4) * все они кажутся намного медленнее во время выполнения * указывает на то, что вы на самом деле не пробовали это, не определили проблему с производительностью и преждевременно оптимизируете свой код. Учитывая (1) и (3), вероятно, гораздо проще решать проблемы с производительностью.
Мои предложения:
(1) Используйте @synthesize. Будет сгенерирован правильный и быстрый код с адресами (1) и (3).
(2) Используйте КВО или один из других механизмов. Пока вы не обнаружите проблему с производительностью с помощью инструментов и количественного анализа, у вас не будет проблем с производительностью.
(3) Рассмотрите возможность использования CoreData (если, конечно, вы не нацелены на OS 2.x). Пример кода взят из чего-то, что, очевидно, является модельным объектом. Если ваш код хорошо интегрирован в модель / представление / контроллер, использование CoreData на уровне модели может упростить ваше приложение, а CoreData прекрасно справляется с отслеживанием изменений.