在类别中递归反转NSString

时间:2016-06-01 21:52:16

标签: ios objective-c recursion objective-c-category

我将此类别用于以递归方式撤消NSString。我得到了正确的答案。但我不确定内存管理是否合适。我对Objective-C中的内存管理知之甚少。

任何其他有效的方式都是非常令人钦佩的。

-(NSString *)reverseString{
    if ([self length]<2) {
        return self;
    } else {
        return [[[self substringFromIndex:1] reverseString] stringByAppendingString:[self substringToIndex:1]];
    }
}

然而,这个问题类似于Reverse NSString text,但不是重复的问题,因为我在这里用递归来实现它。我特别询问了内存消耗,而不是任何代码示例。

1 个答案:

答案 0 :(得分:3)

使用递归来反转一个字符串是一个有趣的思考练习,但是它的速度非常慢并且可怕地浪费内存。您需要创建2n个临时字符串。 (其中n是字符串中的字符数)这些字符串中的n只有1个字符长,其他n个字符串是1,2,3,4,5等等字符,最多为n-1。

(内存分配非常慢。)

另外你创建了n个堆栈帧。正如rmaddy在他的评论中所说的那样,你很可能会在非常长的字符串中引起堆栈溢出。

如果你这样做是为了了解递归,那很好。否则,完全抛弃这种方法并编写循环遍历数组的代码,将每个字符附加到可变字符串。