-characterAtIndex:
является самым простым подходом, но лучше всего перейти к CFString и использовать CFStringInlineBuffer, как в этом методе:
- (NSIndexSet *) indicesOfCharactersInSet: (NSCharacterSet *) charset
{
if ( self.length == 0 )
return ( nil );
NSMutableIndexSet * set = [NSMutableIndexSet indexSet];
CFIndex i = 0;
UniChar character = 0;
CFStringInlineBuffer buf;
CFStringInitInlineBuffer( (CFStringRef)self, &buf, CFRangeMake(0, self.length) );
while ( (character = CFStringGetCharacterFromInlineBuffer(&buf, i)) != 0 )
{
if ( [charset characterIsMember: character] )
[set addIndex: i];
i++;
}
return ( set );
}
Это лучше, потому что он будет захватывать несколько символов одновременно, выбирая больше по мере необходимости. Фактически это строковая версия for ( id x in y )
в ObjC 2.