【问题标题】:Memory Leak in Foundation NSCFString. NSString created and Released. Still LeaksFoundation NSCFString 内存泄漏。 NSString 创建并发布。仍然泄漏
【发布时间】:2011-10-13 16:24:00
【问题描述】:

我从这段代码中得到了一个泄露的 NSCFString。我知道这与 NSString 有关,但是我不明白泄漏是如何发生的。提前感谢您的帮助...

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

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

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


}

【问题讨论】:

  • 您在检查仪器上的泄漏吗??
  • 是的,我正在运行设备并检查仪器中的泄漏

标签: iphone xcode cocoa-touch memory-management memory-leaks


【解决方案1】:

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

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

此外,您可以将代码缩减为:

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

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

【讨论】:

  • 我更改了代码并检查了我的 mapView 版本。泄漏仍然存在,但现在它来自 MapKit。我将属性设置为 nil 并在 dealloc 中释放 iVar。 -(void)viewDidUnload { [超级 viewDidUnload]; self.mapView=nil;} - (void)dealloc { [_mapView release]; [超级释放];}
  • @SteveBay22 - 泄漏也有可能在 Apple 的框架中,它不时发生。仔细检查,并在 bug report.apple.com 提交错误
【解决方案2】:

Apple 的 Framework 好友中有很多错误.. 不用担心框架泄漏。

只要遵守你身边的规则。对于每个alloccopyretain,都必须有一个对应的release

iOS 处理NSString 的方式也完全不同。所以最好遵守规则。

希望对你有帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-02-21
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2012-10-29
    相关资源
    最近更新 更多