I have two simple solutions for this purpose:
+(NSString*)reverseString:(NSString *)str { NSMutableString* reversed = [NSMutableString stringWithCapacity:str.length]; for (int i = (int)str.length-1; i >= 0; i--){ [reversed appendFormat:@"%c", [str characterAtIndex:i]]; } return reversed; } +(NSString*)reverseString2:(NSString *)str { char* cstr = (char*)[str UTF8String]; int len = (int)str.length; for (int i = 0; i < len/2; i++) { char buf = cstr[i]; cstr[i] = cstr[len-i-1]; cstr[len-i-1] = buf; } return [[NSString alloc] initWithBytes:cstr length:len encoding:NSUTF8StringEncoding]; }
Now let's test it!
NSString* str = @"Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language"; NSLog(@"REV 1: %@", [Util reverseString:str]); start = [NSDate date]; for (int i = 0 ; i < 1000; ++i) [Util reverseString:str]; end = [NSDate date]; NSLog(@"Time per 1000 repeats: %f", [end timeIntervalSinceDate:start]); NSLog(@"REV 2: %@", [Util reverseString2:str]); start = [NSDate date]; for (int i = 0 ; i < 1000; ++i) [Util reverseString2:str]; end = [NSDate date]; NSLog(@"Time per 1000 repeats: %f", [end timeIntervalSinceDate:start]);
Results:
ConsoleTestProject[68292:303] REV 1: egaugnal gnimmargorp C eht ot gnigassem elyts-klatllamS sdda taht egaugnal gnimmargorp detneiro-tcejbo ,esoprup-lareneg a si C-evitcejbO ConsoleTestProject[68292:303] Time per 1000 repeats: 0.063880 ConsoleTestProject[68292:303] REV 2: egaugnal gnimmargorp C eht ot gnigassem elyts-klatllamS sdda taht egaugnal gnimmargorp detneiro-tcejbo ,esoprup-lareneg a si C-evitcejbO ConsoleTestProject[68292:303] Time per 1000 repeats: 0.002038
And the result was:
ConsoleTestProject[68322:303] chars: 1982 ConsoleTestProject[68322:303] Time 1 per 1000 repeats: 1.014893 ConsoleTestProject[68322:303] Time 2 per 1000 repeats: 0.024928
The same text with the above functions:
ConsoleTestProject[68366:303] Time 1 per 1000 repeats: 0.873574 ConsoleTestProject[68366:303] Time 2 per 1000 repeats: 0.019300 ConsoleTestProject[68366:303] Time 3 per 1000 repeats: 0.342735 <-Vladimir Gritsenko ConsoleTestProject[68366:303] Time 4 per 1000 repeats: 0.584012 <- Jano
So, choose your performance!
HotJard Aug 12 '13 at 10:50 on 2013-08-12 10:50
source share