-characterAtIndex:
est l'approche plus simple, mais le mieux est de descendre à CFString et utiliser un CFStringInlineBuffer, comme dans cette méthode:
- (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);
}
C'est meilleur parce qu'il va récupérer un certain nombre de caractères à la fois, aller chercher plus au besoin. C'est effectivement la version de caractères for (id x in y)
dans ObjC 2.
Merci! Cela fait l'affaire. – Alan