2011-11-29 63 views
5

使用TWRequest时,Instruments(泄漏)报告内存泄漏,我无法真正看到我在做什么错误。在非ARC项目中使用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]; 
}]; 

绘制与仪器(泄漏)此代码后,它告诉我,以“performRequestWithHandler”行泄漏:

Instruments screenshot

Marked line

任何想法如何防止此泄漏?

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

回答

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

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