【问题标题】:Potential leak of an object in objective c目标 c 中对象的潜在泄漏
【发布时间】:2012-01-19 01:13:38
【问题描述】:

在我的应用程序中的 xml 解析方法中找到了字符委托方法,我使用了下面的代码

NSString *Str =  [[[NSString alloc] initWithString:foundString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] ;

if ([weekNames containsObject:elementName]) {
  //  if (!settings) {
    //    NSMutableDictionary *dict1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"",@"no",@"بسم الله الرحمن الرحيم",@"surah",nil];

      //  [weekDict insertObject:dict1 atIndex:0];             
    //}
    [array1 addObject:weekDict];
}
if ([elementName isEqualToString:@"DUA"]) {
    [weekDict addObject:duaDict];
}
if ([elementName isEqualToString:@"NO"]) {
    [duaDict setObject:Str forKey:@"no"];   
}
if ([elementName isEqualToString:@"SURAH"]) {
    [duaDict setObject:Str forKey:@"surah"];    
}
foundString=nil;**

如果我在分析应用程序中使用此代码,我会遇到潜在的内存泄漏。 如果我自动释放 Str 它会释放太多次。 为什么会这样。请任何人帮助我。 提前致谢

【问题讨论】:

  • 您在哪个对象中出现内存泄漏?

标签: objective-c ios memory-management memory-leaks xml-parsing


【解决方案1】:

这个:

NSString *Str =  [[[NSString alloc] initWithString:foundString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]

真的应该是:

NSString *Str =  [foundString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

您现在所做的是创建(alloc/init)一个新的 NSString,然后立即泄漏它,因为您实际上从未保存过指针。事实证明,你从不需要 NSString 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多