我将此类别用于以递归方式撤消NSString
。我得到了正确的答案。但我不确定内存管理是否合适。我对Objective-C中的内存管理知之甚少。
任何其他有效的方式都是非常令人钦佩的。
-(NSString *)reverseString{
if ([self length]<2) {
return self;
} else {
return [[[self substringFromIndex:1] reverseString] stringByAppendingString:[self substringToIndex:1]];
}
}
然而,这个问题类似于Reverse NSString text,但不是重复的问题,因为我在这里用递归来实现它。我特别询问了内存消耗,而不是任何代码示例。
答案 0 :(得分:3)
使用递归来反转一个字符串是一个有趣的思考练习,但是它的速度非常慢并且可怕地浪费内存。您需要创建2n个临时字符串。 (其中n是字符串中的字符数)这些字符串中的n只有1个字符长,其他n个字符串是1,2,3,4,5等等字符,最多为n-1。
(内存分配非常慢。)
另外你创建了n个堆栈帧。正如rmaddy在他的评论中所说的那样,你很可能会在非常长的字符串中引起堆栈溢出。
如果你这样做是为了了解递归,那很好。否则,完全抛弃这种方法并编写循环遍历数组的代码,将每个字符附加到可变字符串。