代码之家  ›  专栏  ›  技术社区  ›  DerekH

iPhone上的nsxmlparser内存泄漏

  •  0
  • DerekH  · 技术社区  · 15 年前

    下面是我的代码,leaks说我在nsmutableString alloc方法周围遇到内存泄漏。我相信这是我所忽视的,如果有人有任何想法,请告诉我。谢谢!


    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    
        if (!currentValue) {
            currentValue = [[NSMutableString alloc] initWithCapacity:[string length]];
        }
    
        [currentValue setString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
    
    }
    
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    
        if([elementName isEqualToString:@"phone"]){
    
          currentAgent.phone = currentValue;
        }
    
        [currentValue release];
    
        currentValue = nil;
    
    }
    

    -代理是在初始化类时创建的自定义对象。XML有效,并且具有所有适当的开始/结束标记。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Steven Fisher    15 年前

    查看这个代码,我认为更可能是您的代理类在泄漏电话。假设代理使用 retain 对于Phone属性,这将导致电话的持续时间超过其应有的时间。

    对象的创建者会因泄漏而得到“认可”,即使额外的保留是在其他地方。

    换句话说,在代理中:

    - (void)dealloc {
        self.phone = nil;
        // anything else you need to do
        [super dealloc];
    }