// Get the characters into a C array for efficient shuffling NSUInteger numberOfCharacters =[alphabet length]; unichar *characters = calloc(numberOfCharacters,sizeof(unichar)); [alphabet getCharacters:characters range:NSMakeRange(0, numberOfCharacters)];
// Perform a Fisher-Yates shuffle for(NSUInteger i =0; i < numberOfCharacters;++i){ NSUInteger j =(arc4random_uniform(numberOfCharacters - i)+ i); unichar c = characters[i]; characters[i]= characters[j]; characters[j]= c; }
// Turn the result back into a string NSString*result =[NSString stringWithCharacters:characters length:numberOfCharacters]; free(characters); return result; }