iPhone子字符串导致内存泄漏

标签 iphone memory-leaks substring

我刚刚完成我的应用程序,所以我进入了运行工具来识别应用程序中的泄漏的阶段。我遇到了一个泄漏,但我无法弄清楚为什么它被注册为泄漏。

例如,我有以下几行:

NSString *imageType = [[[NSString alloc] initWithString:[loopString substringToIndex:[loopString rangeOfString:@"</IMAGE>"].location]] autorelease];
imageType = [imageType substringFromIndex:[imageType rangeOfString:@"<IMAGE>"].location + :@"<IMAGE>".length];

所以基本上我所做的就是拉出“循环字符串”的一部分并将其放入图像类型字符串中,而不仅仅是使用 SubstringFromIndex 方法切断字符串的尾部绒毛。

当我运行仪器时,它显示“NSCFString substringwithRange”泄漏。它突出显示第二行:

imageType = [imageType substringFromIndex:[imageType rangeOfString:@"<IMAGE>"].location + :@"<IMAGE>".length];

我认为 substringFromIndex 方法应该返回一个自动添加到自动释放池中的字符串。

关于我哪里出错了有什么想法吗?

谢谢

以下是重构后的代码:

- (void)SetupTop10:(NSString *)Top10Data
{
while (Top10Data != @"") {
    NSLog(Top10Data);
    if ([Top10Data rangeOfString:@"</TOP10ENTRY>"].location == NSNotFound){
        Top10Data = @"";
    }
    else
    {

        NSString *loopString = [Top10Data substringToIndex:[Top10Data rangeOfString:@"</TOP10ENTRY>"].location + 13];
        Top10Data = [Top10Data stringByReplacingOccurrencesOfString:loopString withString:@""]; 

        //NOW CREATE A RECORD FOR THIS ITEM
        NSString *imageType = [loopString substringToIndex:[loopString rangeOfString:@"</IMAGE>"].location];
        imageType = [imageType substringFromIndex:[imageType rangeOfString:@"<IMAGE>"].location + 7];
        NSString *displayText = [loopString substringToIndex:[loopString rangeOfString:@"</DISPLAYTEXT>"].location];
        displayText = [displayText substringFromIndex:[displayText rangeOfString:@"<DISPLAYTEXT>"].location + 13];
        NSString *link = [loopString substringToIndex:[loopString rangeOfString:@"</INTERESTID>"].location];
        link = [link substringFromIndex:[link rangeOfString:@"<INTERESTID>"].location + 12];
        [Top10Images addObject:imageType];
        [Top10Links addObject:link];
        [Top10s addObject:displayText];
        Top10RowCount = Top10RowCount + 1;
    } 
}

[self.Top10Table reloadData];
Top10Table.hidden = NO;
loadingLabel.hidden = YES;
loadingIndicator.hidden = YES;

}

//********************

最佳答案

看起来没有漏水。但为什么

NSString *imageType = [[[NSString alloc] initWithString:
             [loopString substringToIndex:[loopString
                                             rangeOfString:@"</IMAGE>"].location]
         ] autorelease];

如果你有效地得到了同样的结果

NSString *imageType = [loopString substringToIndex:[loopString
                                             rangeOfString:@"</IMAGE>"].location];

内存使用量减半?

关于iPhone子字符串导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444802/

相关文章:

iphone - 从 app1 启动 app2 并传递数据

iphone - 如何在iPhone上找到一个城市的经度和纬度?

android - 将 Context/Activity 实例保留在 RecyclerView.Adapter 中是否是泄漏安全的?

c++ - 在 C++ 中设计多维数组

javascript - 如何在 2 个 div 上使用 substr?

iphone - iPhone 录制视频时可以更改相机 View 吗

html - 微信不会重定向到 iPhone 上的 iTunes 应用商店

testing - 静态分析可以检测内存泄漏吗?

java - 在 Java 中对单个字符进行子字符串化

C# 长子串函数