當我的NSXMLParser完成並從內存中釋放後,我得到了一個奇怪的泄漏。ios 4.0上的NSXMLParser內存泄漏 - ** NOT ** NSCFString
它出現了NSMapTable的alloc泄漏。這是我的堆棧:
0 libSystem.B.dylib calloc
1 libobjc.A.dylib _internal_class_createInstanceFromZone
2 libobjc.A.dylib class_createInstance
3 Foundation NSAllocateObject
4 Foundation +[NSMapTable alloc] <===== this is the leak...
5 Foundation -[NSXMLParser initWithData:]
6 Foundation -[NSXMLParser initWithContentsOfURL:]
7 idispatch -[RootViewController parseXML:] /Developer/iPhone Apps/iDispatch/Classes/RootViewController.m:562 <================== this is my code calling
8 Foundation -[NSThread main]
9 Foundation __NSThread__main__
10 libSystem.B.dylib _pthread_start
11 libSystem.B.dylib thread_start
想法?
欣賞任何光線,你可以擺脫!
下面的代碼:
[NSThread detachNewThreadSelector:@selector(parseXML:)
toTarget:self
withObject:requestStr];
其自身的線程調用此方法:
- (void)parseXML:(NSString*)theURL {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:theURL]];
DLog(@"URL: %@",theURL);
[parser setDelegate:self];
[parser parse];
[parser release];
[pool release];
DLog(@"xml parser thread end and released");
}
你能顯示一些代碼嗎?它有點難以從錯誤信息中反轉你的代碼。特別是在您創建NSXMLParser的地方,很高興看到 – 2010-08-02 01:54:31
schone:使用此代碼更新您的原始問題,而不是將其粘貼爲評論。 – iwasrobbed 2010-08-02 02:12:19
這是一個解決方法:http://blog.filipekberg.se/2010/11/30/nsxmlparser-has-memory-leaks-in-ios-4/ – 2010-11-30 14:33:48