【问题标题】:leaks when using NSData, NSURL,NSMutableURLRequest,NSURLConnection and sendSynchronousRequest使用 NSData、NSURL、NSMutableURLRequest、NSURLConnection 和 sendSynchronousRequest 时泄漏
【发布时间】:2010-06-16 11:05:59
【问题描述】:

我在下面的代码“NSData *returnData = [NSURLConnection ......”中的这一行得到了泄漏

NSURL *finalURL = [NSURL URLWithString:curl]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData 超时时间:10]; [theRequest setHTTPMethod:@"GET"]; NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest returnedResponse:nil error:nil]; BOOL 启用 = [self getAutoGenerateObject:returnData]; 返回启用;

请帮我解决这个问题。 谢谢你, 马丹·莫汉

【问题讨论】:

    标签: nsurlconnection


    【解决方案1】:

    您将需要释放 returnData。这就是为什么在 Apple 在“URL 加载编程指南/使用 NSURLConnection”的示例中,returnData 被分配给 iVar 并在异步通信的情况下在 dealloc 或 connectionDidFinishLoading 中释放。

    取决于您在 getAutoGeneratedObject 方法中执行的操作,但理论上它可以在那里取得所有权。

    您也可以将 returnData 标记为自动释放,但并不总是建议这样做,尤其是在响应数据很大的情况下。

    NSURL *finalURL = [NSURL URLWithString:curl]; 
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:finalURL 
                                                              cachePolicy:NSURLRequestReloadIgnoringCacheData 
                                                          timeoutInterval:10]; 
    [theRequest setHTTPMethod:@"GET"]; 
    
    NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil]; 
    
    BOOL enabled = [self getAutoGenerateObject:returnData]; 
    
    [returnData release];
    
    return enabled;
    

    【讨论】:

    • 你确定吗?这直接违反了 Cocoa 的内存管理规则,静态分析器应该提醒你。如果确实需要这种 hack,那么应该将它作为一个错误报告给 Apple。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多