在MKMapview中使用NSAutoreleasepool时应用程序崩溃regionDidChangeAnimated方法
问题描述:
我正在处理地图应用程序,因为我希望在用户更改地图视图时放弃引脚(如在Zillow应用程序中)。我正在使用下面的代码。我尝试使用NSAutoreleasepool从服务器加载xml数据在后台线程中执行xml解析。在MKMapview中使用NSAutoreleasepool时应用程序崩溃regionDidChangeAnimated方法
-
(无效)的MapView:(的MKMapView *)的MapView regionDidChangeAnimated:(BOOL)动画{
的NSLog(@ “内部区域没有改变”);
urlString =[NSString stringWithFormat: @"http://asdfasdasdf.com/asdfasdf/mapxml.php]; [stories1 release]; [mapview removeAnnotations:eventPoints1]; eventPoints1 = [[NSMutableArray array] retain]; [self performSelectorInBackground:@selector(callParsing) withObject:nil];
}
- (无效)callParsing {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self parseXMLFileAtURL:urlString];
[self performSelectorOnMainThread:@selector(droppingPin) withObject:nil waitUntilDone:YES];
[pool drain];
}
上面的代码工作正常,但一旦我改变的MapView,所述appllication得到坠毁。任何人都可以帮我解决这个问题?
在此先感谢。
答
当从stringWithFormat返回时,urlString已经被自动释放。 由于您在另一个线程上执行的callParsing中使用urlString,因此应将其作为对象传递给该方法。否则,您可能会在执行callParsing方法之前将其释放,从而导致崩溃:
...
[self performSelectorInBackground:@selector(callParsing:) withObject:urlString];
...
-(void)callParsing:(NSString*)urlString {
...