TWRequest, похоже, дает утечку при использовании в проектах, отличных от ARC.

Инструменты (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];
}]; 

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

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

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

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

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


person kiteloop    schedule 29.11.2011    source источник


Ответы (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];

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

person XJones    schedule 29.12.2011