【问题标题】:Where does this code leak?这段代码在哪里泄漏?
【发布时间】:2010-02-20 04:08:40
【问题描述】:

Instruments 告诉我这段代码泄露了。在哪里?我必须释放conn吗?

- (void)loadFeatureXML:(id<BPLFeatureLoaderDelegate>)delegate {

    _delegate = delegate;

    NSURLConnection *conn;
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.myxmlfeed"]];
    if ([NSURLConnection canHandleRequest:request]) {   
        conn = [NSURLConnection connectionWithRequest:request delegate:self];
        if (conn) {
        self.featureXMLData = [NSMutableData data];
        }
    } 
}

【问题讨论】:

  • 仪器还应该向您显示哪些对象被泄露以及它们来自何处。

标签: iphone cocoa-touch memory-leaks


【解决方案1】:

我最好的猜测是你泄露了委托;为什么不:

self._delegate = delegate;

就像你下面的self.featureXMLData

【讨论】:

  • 但是如果你覆盖那个指针而不发送releaseautorelease 消息,系统怎么知道释放旧的?我想如果没有看到设置 _delegate 的其他代码,很难说 - 我没有看到任何其他问题。
  • 此外,如果您确实有一个用于 featureXMLData 的显式(即非综合)设置器,则应检查它以确保它正在执行正确的保留/释放操作。跨度>
最近更新 更多