gpt4 book ai didi

objective-c - SubstringWithRange NSString 内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:10 27 4
gpt4 key购买 nike

通过 X-Code 中的 Leaks 工具运行我的程序,它指出这个函数是我内存泄漏的主要原因。

    + (NSMutableArray *) getColumns:(NSString *) deviceHtml {

NSMutableArray *ret = [[[NSMutableArray alloc] init] autorelease];
NSRegularExpression *m = [[NSRegularExpression alloc] initWithPattern:@"<td[\\w\\W\\d\\s</>]*?>[\\w\\W\\d\\s]+?</td>" options:NSRegularExpressionCaseInsensitive error:nil];

NSArray *results = [m matchesInString:deviceHtml options:NSMatchingCompleted range:NSMakeRange(0, [deviceHtml length])];
[m release];

for (NSTextCheckingResult * res in results) {
NSString *cleaned = [deviceHtml substringWithRange:[res range]];
int firstClose = [cleaned rangeOfString:@">"].location;
int cleanedLength = [cleaned length];
NSString *cleaned1 = [cleaned substringWithRange:NSMakeRange(firstClose+1, cleanedLength-(firstClose+1))];
int closingComment = [cleaned1 rangeOfString:@"</td"].location;
NSString *cleaned2 = [cleaned1 substringWithRange:NSMakeRange(0, closingComment)];
NSString *cleaned3 = [cleaned2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[ret addObject:cleaned3];
}
return ret;
}

特别是这一行,

    NSString *cleaned2 = [cleaned1 substringWithRange:NSMakeRange(0, closingComment)];

我不太确定使用 NSCFStrings 和便捷方法进行内存管理,所以我有点卡住了,谁能给我一些指示?

谢谢

最佳答案

首先,方法不应该是getColumns:,而是类似于columnsForDevice:get* 作为前缀在 Cocoa 中具有非常特殊的含义,但事实并非如此。

其次,Leaks 工具会向您显示泄漏发生的位置,而不是泄漏实际发生的位置

如果返回的数组在别处过度保留,那将是泄漏的根源。

关于objective-c - SubstringWithRange NSString 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com