簡體   English   中英

NSMutableString內存泄漏

[英]NSMutableString memory leak

我在代碼中的儀器中遇到內存泄漏 在此處輸入圖片說明

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

     NSMutableString * res = [[[NSMutableString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]autorelease];
     [webData release];
    [connection release];
        [res replaceOccurrencesOfString:@"&" withString:@"&" options:NSCaseInsensitiveSearch range:(NSRange){0,[res length]}];
    [delegate getcat:res];

    [pool drain];
}



- (void)getcat:(NSString*)xml
{

if (xmlParser) {

    [xmlParser release];
}
Cid = [[NSMutableArray alloc] init];
Categories = [[NSMutableArray alloc] init];

NSData *data = [xml dataUsingEncoding:NSUTF8StringEncoding];
xmlParser = [[NSXMLParser alloc] initWithData:data];

[xmlParser setDelegate:self];

[xmlParser setShouldResolveExternalEntities:YES];
[xmlParser parse];
[xmlParser release];

}

這是管理內存的正確方法嗎?

與其設置自動釋放池(實際上會釋放字符串),不如不自己釋放它呢? 如果委托將字符串保留在getcat: ,則可以簡單地釋放它:

- (void) connectionDidFinishLoading: (NSURLConnection *) connection
{
    // Omit the autorelease pool.

    NSMutableString * res = [[NSMutableString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    [webData release];
    [connection release];
    [res replaceOccurrencesOfString:@"&" withString:@"&" options:NSCaseInsensitiveSearch range:NSMakeRange(0, res.length)];
    [delegate getcat:res];
    [res release];
}

看一下getcat:我看到一個問題:

[xmlParser parse];
[xmlParser release];

通常,對象需要委托才能從線程返回結果。 我假設[xmlParser parse]啟動了一個線程。 您可能不應該在完成之前釋放它,即您可以在parserDidEndDocument:中進行parserDidEndDocument:

但是,這不能解釋許多泄漏的字符串。

我解決了這個問題

泄漏在

  • (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName屬性:(NSDictionary *)attributeDict {

    currentElement = [elementName復制]; --->此行始終泄漏,但泄漏儀器顯示該行

}

self.currentElemnt = elementName替換代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM