0

他の2つの文字列の間のすべての文字列を検索できるカスタム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];

セカンドリストを手動で解放すると、例外が発生します。

前もって感謝します!

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 に答える