Строковые литералы Objective-C являются бессмертными объектами. Они создаются, когда ваш двоичный файл загружен в память. С этим знанием прежняя форма не создает временную NSString
.
Я, честно говоря, не знаю , который быстрее в целом , потому что это также зависит от внешних условий; NSString
может представлять строки нескольких кодировок (по умолчанию UTF-16), если urlString
имеет преобразование кодирования для выполнения, то это может быть ударом производительности для подхода или . В любом случае, они оба будут довольно быстрыми - я не стал бы беспокоиться об этом случае, если у вас не будет много (например, тысяч) таких для создания, и это критично ко времени, потому что их производительность должна быть одинаковой.
Поскольку вы используете форму: NSString = NSString+NSString
, литерал NSString может быть быстрее для нетривиальных случаев, поскольку длина сохраняется с объектом, а кодировки обеих строк могут уже соответствовать строке назначения. Строка C, используемая в вашем примере, также будет тривиальной для преобразования в другую кодировку, плюс она короткая.
C-строки, как более примитивный тип, могут сократить время загрузки и / или использование памяти, если вам нужно определить lot из них.
В простых случаях в этом случае я бы просто использовал литералы NSString
, если только проблема не намного больше, чем предполагал бы пост.
Если вам нужно также представление строки C для заданного набора литералов, то вы можете определить строковые литералы C. Определение строковых литералов Си также может заставить вас создавать временные NSString
s на основе строк Си. В этом случае вы можете определить один для каждого варианта или использовать API-интерфейсы CFString
'create CFString
с внешним буфером'. Опять же, это было бы для очень необычных случаев (микрооптимизация, если вы действительно не проходите через огромные наборы этих строк).