TWRequest, похоже, протекает при использовании в не-ARC проектах

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

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

Скриншот инструментов

Отмеченная линия

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

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

1 ответ

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

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

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

Другие вопросы по тегам