2012-04-11 77 views
0

我已從此網站下載此代碼。 http://homepages.ius.edu/rwisman/C490/html/nsxmlparser.htm引用計數的對象在釋放後使用嗎? NSXMLParser

正如我分析它。我有內存泄漏。我試過谷歌的一切從autorelease,發件人,無,[解析器setDelegate:[Top10Parser新]]等,它不工作。

我需要幫助。

- (void) run: (id) param { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSXMLParser *parser = [NSXMLParser alloc]; 
    [parser initWithContentsOfURL: url]; 

[parser setDelegate:self]; < - ( 「引用計數對象用於後它是釋放」)

[parser parse]; 
    [parser release]; 

    if ([delegate respondsToSelector:@selector(parseDidComplete:)]) 
     [delegate performSelector:@selector(parseDidComplete:) onThread: thread 
         withObject: outstring waitUntilDone:NO]; 

    [pool release]; 
} 

回答

2

更改以下兩行:

NSXMLParser *parser = [NSXMLParser alloc]; 
[parser initWithContentsOfURL: url]; 

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL: url]; 

思想的部分學校,+alloc返回擁有的對象和init方法既不添加也不移除所有權。它更正確 - 分析器如何處理它 - 想到一個在接收器上使用引用並返回一個擁有對象的init方法。因此,如果您調用init方法但不將結果分配給self,那麼您擁有的self的所有權已被佔用,並且您沒有指向新的擁有對象的指針。 self的所有未來用途都在使用您不再擁有的物件。