Потоки внутри ASIHTTPRequest - PullRequest
       10

Потоки внутри ASIHTTPRequest

1 голос
/ 08 февраля 2012

У меня есть одноэлементный класс-оболочка под названием «Folio APIWrapperv2», который отвечает за обработку всех моих вызовов данных API в моем приложении для iPhone.

Этот класс реализует ASIHTTPRequest для получения JSON с моего сервера. Когда ASIHTTPRequest завершается, он вызывает requestFinished :. В этом методе у меня есть дополнительная обработка данных, которая может занять пару секунд. Это не главное, но оно немного замедляет приложение, так как это блокирующий вызов. Чтобы это исправить, я создаю новый поток, используя GCD. Однако при запуске этого потока я получаю следующую ошибку:

[FolioAPIWrapperv2 respondsToSelector:]: message sent to deallocated instance 0x245050

Эта функция вызывается в методе "handleBytesAvailable" ASIHTTPRequest в строке:

if ([[self delegate] respondsToSelector:[self didReceiveDataSelector]]) {

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

1 Ответ

0 голосов
/ 08 февраля 2012

Вы устанавливаете делегат как экземпляр класса или самого класса?Делегат должен быть экземпляром класса.

В противном случае, если вы получаете вывод:

[FolioAPIWrapperv2 respondsToSelector:]: message sent to deallocated instance 0x245050

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

В любом случае, по крайней мере, один из подходов к этому - добавить некоторую отладку, например, при создании запроса:

NSLog("set delegate to %p", request.delegate);

и аналогичное ведение журнала для себя в init / deallocвашего синглтона.

...