在非ARC项目中使用TWRequest似乎泄漏

时间:2011-11-29 20:54:50

标签: ios memory-leaks instruments twrequest social-framework

使用TWRequest时,

Instruments(Leaks)报告内存泄漏,我无法真正看到我做错了什么。

以下是重现此问题的步骤:

创建一个新的Xcode项目(禁用ARC),添加Twitter Framework,然后将以下行添加到代码中(例如在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(Leaks)分析此代码后,它告诉我带有“performRequestWithHandler”的行正在泄漏:

Instruments screenshot

Marked line

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

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

1 个答案:

答案 0 :(得分:2)

我不确定为什么乐器会将其作为泄漏进行检测,但您可以在完成块之外发布请求。启动请求后,连接将保留该请求,直到执行完成块为止。将您的代码更改为:

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];

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