5

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 (Leaks) 分析此代码后,它告诉我带有“performRequestWithHandler”的行正在泄漏:

仪器截图

标记线

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

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

4

1 回答 1

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

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

于 2011-12-29T19:31:48.863 回答