Bạn có thể tăng tốc độ -characterAtIndex:
bằng cách chuyển đổi nó để nó IMP hình thức đầu tiên:
NSString *str = @"This is a test";
NSUInteger len = [str length]; // only calling [str length] once speeds up the process as well
SEL sel = @selector(characterAtIndex:);
// using typeof to save my fingers from typing more
unichar (*charAtIdx)(id, SEL, NSUInteger) = (typeof(charAtIdx)) [str methodForSelector:sel];
for (int i = 0; i < len; i++) {
unichar c = charAtIdx(str, sel, i);
// do something with C
NSLog(@"%C", c);
}
EDIT: Dường như CFString
Reference chứa các phương pháp sau đây:
const UniChar *CFStringGetCharactersPtr(CFStringRef theString);
Điều này có nghĩa bạn có thể làm như sau:
const unichar *chars = CFStringGetCharactersPtr((__bridge CFStringRef) theString);
while (*chars)
{
// do something with *chars
chars++;
}
Nếu bạn không muốn phân bổ m emory để đối phó với bộ đệm, đây là con đường để đi.
Nguồn
2012-04-17 21:05:41
Nếu bạn lo lắng về hiệu suất, bạn nên sử dụng NSData và truy cập mảng byte của điều đó. – joerick
Nó chỉ ra rằng CFString thực sự có một cách để làm điều này, trong CFStringGetCharactersP ... –
"... nhưng điều đó sẽ chậm hơn ..." - điều này được gọi là ** tối ưu hóa sớm **. Bạn đang đưa ra giả định về hiệu suất ngay cả trước khi bạn biết liệu hiệu suất có phải là một vấn đề hay không. Bạn nên thực hiện nó một cách rõ ràng (sử dụng 'characterAtIndex') và tối ưu hóa nó chỉ khi bạn có vấn đề về hiệu năng. – Sulthan