2010-10-06 1 views
2

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

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

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

+0

Я не уверен, почему это обозначено как «сообщество wiki»? – JosephH

ответ

7

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

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

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

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

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

+0

Спасибо, это то, что я искал –

+0

Итак, там теперь является методом для этого: –

+2

[запрос clearDelegatesAndCancel]; [запрос выпуска]; –

0

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

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

+0

Вы меня задумали в разном порядке - может быть, что предложение выдается преждевременно, а не делегат - спасибо –

+0

No Problem ^^ Удачи – Vinzius