0

我创建了一个自定义 NSString 类别,它可以让我找到其他两个字符串之间的所有字符串。我现在遇到的问题是发现我的脚本中有很多 kB 泄漏。请看下面的代码:

    #import "MyStringBetween.h"

@implementation NSString (MyStringBetween)

-(NSArray *)mystringBetween:(NSString *)aString and:(NSString *)bString;
{
    NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];

    NSArray *firstlist = [self componentsSeparatedByString:bString];
    NSMutableArray *finalArray = [[NSMutableArray alloc] init];


    for (int y = 0; y < firstlist.count - 1 ; y++) {
        NSString *firstObject = [firstlist objectAtIndex:y];
        NSMutableArray *secondlist = [firstObject componentsSeparatedByString:aString];
        if(secondlist.count > 1){

            [finalArray addObject:[secondlist objectAtIndex:secondlist.count - 1]];
        }
    }

    [autoreleasepool release];

    return finalArray;
}
@end

我承认我不太擅长释放对象,但我相信 NSAutoreleasePool 会为我处理事情。

泄漏的行:

NSMutableArray *secondlist = [firstObject componentsSeparatedByString:aString];

手动释放 secondlist 会引发异常。

提前致谢!

4

2 回答 2

3

不,这是泄漏的行:

NSMutableArray *secondlist = [[NSMutableArray alloc] init];

而且它的泄漏并不大(只是一个空的可变数组)。不过,不要那样做。

特别是,该行:

    secondlist = [[firstlist objectAtIndex:y] componentsSeparatedByString:aString];

正在分配对空可变数组的引用。

FinalArray应该命名finalArray

于 2010-11-15T06:44:38.340 回答
1

finalArray 正在泄漏。您应该在返回它之前自动释放它,但请确保在分配自动释放池之前或释放它之后执行它。

于 2010-11-15T09:54:56.287 回答