2011-07-26 57 views
1

我从这段代码中得到一个泄露的NSCFString。我知道它与NSString有关,但我不明白泄漏是如何发生的。感谢您的帮助提前...基金会NSCFString中的内存泄漏。 NSString创建和发布。仍然泄漏

-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark{ 

    NSString *pTitle = [[NSString alloc] initWithString:placemark.title]; 

    mapView.userLocation.title = pTitle; 
    [pTitle release]; 


} 
+0

你是否检查仪器上的泄漏? – Hisenberg

+0

是的,我正在运行一个设备并检查仪器中的泄漏 – iOSDevSF

回答

3

您是否还泄漏地图视图?在这种情况下,这个字符串的报告泄漏只是通过扩展泄漏的地图视图。

大多数情况下最泄漏对象不是罪魁祸首。罪魁祸首通常是一个持有十几个最泄漏对象的单个对象。

此外,您可以将代码削减到:

-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark { 
    mapView.userLocaltion.title = placemark.title; 
} 

无需不需要的时候做的内存管理:)。

+0

我更改了我的代码并检查了我的mapView版本。但泄漏现在仍然存在,现在它来自MapKit。 我将属性设置为零,并在dealloc中释放iVar。 - (void)viewDidUnload {super viewDidUnload]; \t self.mapView = nil;} - (void)dealloc {0} {0} {0} {_mapView release}; [super dealloc];} – iOSDevSF

+0

@ SteveBay22 - 此漏洞也存在于苹果的框架中,它不时发生。仔细检查,并提交bug http://report.apple.com – PeyloW

+0

不需要做内存管理,当不需要:)。! –

0

苹果的框架伙伴中有很多错误..不要担心从框架泄漏。

只要按照你身边的规则。对于每个alloc,copyretain,必须有相应的release

另外iOS以一种完全不同的方式处理NSString ..所以最好遵守规则。

希望它有帮助..