Во-первых, ваше определение метода Objective C в точности эквивалентно этой функции C:
NSString* stringByTrimmingPrefix(NSString* self, SEL _cmd, NSString* strPrefix)
{
...
}
Как видите, self
- это просто еще один параметр функции; Вы можете переназначить его на что угодно, и это не повлияет на состояние исходного экземпляра NSString *, на который он первоначально указывал.
Так что нет ничего плохого в том, что вы делаете в своей первой реализации, в этом отношении.
Однако ни одна из ваших реализаций не очень эффективна, и обе имеют ошибки (что произойдет, если вы передадите префикс с более чем одним символом?)
Я бы использовал rangeOfString: options: range: , чтобы найти ваши префиксы, чтобы вы могли создать не более одного дополнительного экземпляра NSString.
См. Поиск, сравнение и сортировка строк