Проблема с запросом ASIHTTP

Есть ли у кого-нибудь еще эта проблема с ASIHTTPRequest? Кажется, что когда я выполняю асинхронный запрос из фонового потока с делегатом, установленным для экземпляра, я могу столкнуться с проблемами, поскольку делегат может быть освобожден до того, как запрос (который помещен в NSOperationQueue) вернет обратный вызов.

Кажется, что ASIHTTPRequest не сохраняет своего делегата - с другой стороны, NSURLConnection от Apple сохраняет делегат («NSURLConnection сохраняет своего делегата при инициализации. Он освобождает делегата, когда соединение завершает загрузку, терпит неудачу или отменяется»). .

Должен ли я выполнять синхронные запросы ASIHTTPRequests в фоновых потоках, чтобы эта работа работала (вместо асинхронных запросов)? А может стоит сбросить ASIHTTPRequest? Или я просто сошла с ума?


person Community    schedule 06.10.2010    source источник
comment
Я не уверен, почему это было помечено как вики сообщества?   -  person JosephH    schedule 07.10.2010


Ответы (2)


Предполагая, что вы используете самую последнюю версию ASIHTTPRequest, правильный способ работы с ней (и предотвращения сбоев) заключается в следующем:

Делегат должен сохранить запрос (и запрос не должен удерживать делегата)

Делегат должен сделать следующее, когда делегат уничтожен (или когда вы хотите отменить запрос):

[request setDelegate:nil];    
[request cancel];
[request release];

Так у вас не должно быть сбоев. (Я переписал обработку делегатов в ASIHTTPRequest несколько месяцев назад именно для того, чтобы избежать некоторых из этих проблем, и я проверил с людьми из Apple, что это был правильный способ обработки вещей, прежде чем делать это. Все мои изменения находятся в официальном репозитории ASIHTTPRequest на github, хотя с тех пор не было официального релиза, то есть этих изменений нет в версии v1.7, поэтому с v1.7 или более ранней версией вы все равно могли видеть сбои, следуя приведенному выше совету.)

person Community    schedule 07.10.2010
comment
Спасибо, это то, что я искал - person Ryan Bavetta; 08.10.2010
comment
Итак, теперь есть способ для этого: - person Ryan Bavetta; 18.11.2010
comment
Это решило большую часть проблемы. Но .... У меня по-прежнему возникают проблемы со сбоями. Я думаю, что нашел источник и сейчас отправляю электронное письмо главному разработчику - person Ryan Bavetta; 18.11.2010

Я не знаю, не сохраняет ли ASIHTTPRequests объект, но пытались ли вы сохранить его при выполнении и освобождении в конце?

У меня еще никогда не было проблем с этой очень хорошей оберткой ^^

person Community    schedule 06.10.2010
comment
Вы заставили меня задуматься в другом направлении - возможно, что запрос был выпущен преждевременно, а не делегат - спасибо - person Ryan Bavetta; 06.10.2010