2011-11-29 13 views
5

Công cụ (Rò rỉ) báo cáo rò rỉ bộ nhớ khi sử dụng TWRequest và tôi không thể thực sự thấy những gì tôi đang làm sai.TWRequest dường như bị rò rỉ khi được sử dụng trong các dự án không phải ARC

Dưới đây là các bước để tạo lại vấn đề:

Tạo một dự án Xcode mới (ARC vô hiệu hóa), thêm khung Twitter và sau đó chỉ cần thêm các dòng sau vào mã (ví dụ như trong 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]; 
}]; 

Sau profiling mã này với Instruments (rò rỉ), nó nói với tôi rằng phù hợp với "performRequestWithHandler" bị rò rỉ:

Instruments screenshot

Marked line

Bất kỳ ý tưởng nào cần làm để ngăn chặn sự rò rỉ này?

Tôi tìm thấy câu hỏi tương tự here nhưng dường như không liên quan đến vấn đề tôi mô tả.

Trả lời

2

Tôi không chắc tại sao các công cụ chọn điều này làm rò rỉ nhưng bạn có thể giải phóng yêu cầu bên ngoài khối hoàn thành. Khi yêu cầu được bắt đầu, nó được giữ lại bởi kết nối cho đến khi khối hoàn thành được thực hiện. Thay đổi mã của bạn thành:

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

Tôi cũng sẽ không ngạc nhiên nếu điều này cũng loại bỏ sự rò rỉ.