簡體   English   中英

Objective-C類別大量泄漏

[英]Big time Leaking in Objective-C Category

我創建了一個自定義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];

手動釋放第二列表會引發異常。

提前致謝!

不,這是泄漏的線:

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

而且這並不是什么大的泄漏(只是一個空的可變數組)。 不過,不要那樣做。

特別是,該行:

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

將引用分配給空可變數組。

另外, FinalArray應該命名為finalArray

finalArray正在泄漏。 您應該在釋放它之前自動釋放它,但是請確保在分配自動釋放池之前或釋放它之后進行釋放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM