Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C,内存泄漏?_Objective C - Fatal编程技术网

Objective c 目标C,内存泄漏?

Objective c 目标C,内存泄漏?,objective-c,Objective C,你们看到内存泄漏了吗?我调用了NSXML委托方法,它基本上将“Question”的一个实例放入了NSMutableArray中。我检查了仪器,在分析它时发现内存泄漏。但我不明白为什么…currentElement=[elementName copy] 请阅读文档中的副本API说明。有人提到 此方法在返回新对象之前保留该对象。但是,方法的调用方负责释放返回的对象。currentElement=[elementName copy] 请阅读文档中的副本API说明。有人提到 此方法在返回新对象之前保留该

你们看到内存泄漏了吗?我调用了NSXML委托方法,它基本上将“Question”的一个实例放入了NSMutableArray中。我检查了仪器,在分析它时发现内存泄漏。但我不明白为什么…

currentElement=[elementName copy]

请阅读文档中的
副本
API说明。有人提到


此方法在返回新对象之前保留该对象。但是,方法的调用方负责释放返回的对象。
currentElement=[elementName copy]

请阅读文档中的
副本
API说明。有人提到


此方法在返回新对象之前保留该对象。但是,方法的调用方负责释放返回的对象。

currentElement---在解析流中没有得到释放。。。其余的代码看起来是正确的

currentElement---在您的解析流中没有被释放。。。代码的其余部分看起来是正确的

您确实需要包含属性声明,以便人们能够有把握地回答内存管理问题(因为属性定义了内存的管理方式),但假设所有
保留
属性:

  • currentElement
    似乎从未被释放

  • 文本
    似乎永远不会发布

  • self.post
    被分配
    [[Question alloc]init]
    的结果。该方法的结果已经是您拥有的对象,并且
    post
    setter再次保留它。在方法退出之前,应按照以下步骤释放:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
      namespaceURI:(NSString *)namespaceURI 
     qualifiedName:(NSString *)qName 
        attributes:(NSDictionary  *)attributeDict{
    
        //currentElenet is NSString
        currentElement = [elementName copy];
    
        if ([elementName isEqualToString:@"struct"]) {      
    
            self.post = [[Question alloc] init];
    
        }
    }
    
    - (void)parser:(NSXMLParser  *)parser foundCharacters:(NSString  *)string{
    
        if ([currentElement isEqualToString:@"string"]) {
            post.text = [NSString stringWithFormat:@"%@ %@", post.text, string];
        }
    }
    
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
     namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName{
    
        if ([elementName isEqualToString:@"struct"]) {
    
            [conversations addObject:post];
            [post release];
            post = nil;
        }
    }
    
    //Question.m file
     @synthesize text
    
    -(id)init{
    
        self = [super init];
        if (self == nil) {
    
        }
        else {
                //declared as retain in .h file
            text = [[NSString alloc]initWithString:@""];
        }
        return self;
    }
    
    -(void)dealloc{
        [super dealloc];
        [title release];
    }
    
    (它也应该在
    dealloc
    中释放,或者在您使用它来平衡setter时释放)


您确实需要包含属性声明,以便人们能够有把握地回答内存管理问题(因为属性定义了内存的管理方式),但假设所有
保留
属性:

  • currentElement
    似乎从未被释放

  • 文本
    似乎永远不会发布

  • self.post
    被分配
    [[Question alloc]init]
    的结果。该方法的结果已经是您拥有的对象,并且
    post
    setter再次保留它。在方法退出之前,应按照以下步骤释放:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
      namespaceURI:(NSString *)namespaceURI 
     qualifiedName:(NSString *)qName 
        attributes:(NSDictionary  *)attributeDict{
    
        //currentElenet is NSString
        currentElement = [elementName copy];
    
        if ([elementName isEqualToString:@"struct"]) {      
    
            self.post = [[Question alloc] init];
    
        }
    }
    
    - (void)parser:(NSXMLParser  *)parser foundCharacters:(NSString  *)string{
    
        if ([currentElement isEqualToString:@"string"]) {
            post.text = [NSString stringWithFormat:@"%@ %@", post.text, string];
        }
    }
    
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
     namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName{
    
        if ([elementName isEqualToString:@"struct"]) {
    
            [conversations addObject:post];
            [post release];
            post = nil;
        }
    }
    
    //Question.m file
     @synthesize text
    
    -(id)init{
    
        self = [super init];
        if (self == nil) {
    
        }
        else {
                //declared as retain in .h file
            text = [[NSString alloc]initWithString:@""];
        }
        return self;
    }
    
    -(void)dealloc{
        [super dealloc];
        [title release];
    }
    
    (它也应该在
    dealloc
    中释放,或者在您使用它来平衡setter时释放)