replaceOccurrencesOfString:...
每次調用它時都會遍歷字符串。
一種替代方法可以使替換速度更快,即手動遍歷字符串一次,並沿途創建一個新字符串。
下面是一個例子,雖然有可能仍有進一步優化
- (NSString *)encodeEntity:(NSString *)string {
NSUInteger length = string.length;
NSMutableString *encodedString = [NSMutableString stringWithCapacity:length];
unichar buffer[length + 1];
[string getCharacters:buffer range:(NSRange){0, length}];
for(NSUInteger i = 0; i < length; i++) {
char current = buffer[i];
switch(current) {
case '&': [encodedString appendString:@"&"]; break;
case '\"': [encodedString appendString:@"""]; break;
case '\'': [encodedString appendString:@"'"]; break;
case '<': [encodedString appendString:@"<"]; break;
case '>': [encodedString appendString:@">"]; break;
default: [encodedString appendFormat:@"%c", current]; break;
}
}
return encodedString;
}
另外,如果您的具體問題是逃避XML實體,這個問題可能是有用的:Objective C HTML escape/unescape
這聽起來像你想轉義HTML實體。看看這個http://stackoverflow.com/questions/659602/objective-c-html-escape-unescape –
那麼,你*可能*失敗,實際上有一個他們稱之爲「編程」的鏡頭。 –