ios - TWRequest 在非 ARC 项目中使用时似乎会泄漏

标签 ios memory-leaks instruments twrequest social-framework

Instruments (Leaks) 在使用 TWRequest 时报告内存泄漏,我真的看不出我做错了什么。

以下是重现问题的步骤:

创建一个新的 Xcode 项目(禁用 ARC),添加 Twitter 框架,然后将以下几行添加到代码中(例如在 viewDidLoad 中):

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSLog(@"in performrequest");

    [postRequest release];
}]; 

在使用 Instruments(泄漏)分析此代码后,它告诉我带有“performRequestWithHandler”的行正在泄漏:

Instruments screenshot

Marked line

有什么想法可以防止这种泄漏吗?

我发现了一个类似的问题here但它似乎与我描述的问题无关。

最佳答案

我不确定为什么 instruments 将此视为泄漏,但您可以在完成 block 之外释放请求。一旦请求发起,它就会被连接保留,直到完成 block 被执行。将您的代码更改为:

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSLog(@"in performrequest");
}];

[postRequest release];

如果这也消除了泄漏,我不会感到惊讶。

关于ios - TWRequest 在非 ARC 项目中使用时似乎会泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317607/

相关文章:

iphone - 如何在 iOS 上检测图像中的向上箭头?

ios - 无法将 Firebase 导入 Swift Playground

c++ - 关于 Safe 类是异常安全的声明的澄清

ios - 需要帮助修复内存泄漏 - NSMutableString

objective-c - ios潜在的泄漏如何解决?

android - 会不会漏?自定义单例中的 FirebaseAnalytics.getInstance

ios - Xcode 中的时间分析器缺少记录设置、显示设置

ios - 无法获取 UIAutomation iOS UILabel 值

ios - 优化 iOS 应用程序的迭代循环

ios - UITabBar 背景图像和栏项目图标的大小和位置在 iOS 7 中很奇怪