TWRequest, похоже, протекает при использовании в не-ARC проектах - PullRequest
5 голосов
/ 30 ноября 2011

Instruments (Leaks) сообщает об утечке памяти при использовании TWRequest, и я не могу понять, что я делаю неправильно.

Вот шаги по воспроизведению проблемы:

Создатьновый проект 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];
}]; 

После профилирования этого кода с помощью инструментов (утечки) это говорит о том,мне что строка с "executeRequestWithHandler" просачивается:

Instruments screenshot

Marked line

Есть идеи, что делать, чтобы предотвратить эту утечку?

Я нашел похожий вопрос здесь но, похоже, он не связан с проблемой, которую я описываю.

1 Ответ

2 голосов
/ 29 декабря 2011

Я не уверен, почему инструменты считают это утечкой, но вы можете отменить запрос за пределами блока завершения. Как только запрос инициирован, он сохраняется соединением до тех пор, пока не будет выполнен блок завершения. Измените свой код на:

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

Я не удивлюсь, если это также устранит утечку.

...