Я не думаю, что есть какой-либо встроенный метод для "экранирования" определенного набора символов.
Если символы, которые вы хотите экранировать, четко определены, я бы, вероятно, придерживался предложенного вами простого решения, грубо заменяя экземпляры символов.
Имейте в виду, что если в исходной строке уже есть экранированные символы, вам, вероятно, следует избегать их двойного экранирования. Одним из способов достижения этой цели было бы пройти через «unescape» любые экранированные строки символов в строке, а затем снова экранировать их все.
Если вам нужно поддерживать набор переменных экранированных символов, взгляните на методы NSScanner "scanUpToCharactersFromSet: intoString:" и "scanCharactersFromSet: intoString:". Вы можете использовать эти методы в NSScanner, чтобы перемещаться по строке, копировать части из раздела «scanUpTo» в изменяемую строку без изменений и копировать части из определенного набора символов только после их экранирования.