Ответ 1
(Я прочитал ваш комментарий к другому вопросу)
После реализации нескольких модулей с использованием ASIHTTPRequest
я узнал, что лучший способ - сохранить ссылку strong
на ваш объект запроса. В вашем случае вы можете:
self.request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:SOME_URL]];
__weak ASIFormDataRequest *weakRequest = self.request; // __block directive not needed since we only access the instance properties.
[self.request setCompletionBlock:^{
if([weakRequest responseStatusCode] == 200)
// ...
Таким образом, вы можете управлять self.request
даже после запуска запроса (например, для отмены). Вы можете сделать self.request = nil;
, когда будете готовы освободить свой запрос, возможно, в вашем блоке завершения или self.request
методах очистки родительских объектов.
Update:
Если вы ориентируетесь на pre-iOS 5, тогда общая земля стоит: используйте __unsafe_unretained
вместо __weak
. Это нормально, потому что, глядя на ASIHTTPRequest.m
, блоки nil
выходят в dealloc()
(т.е. Они не должны выполняться). Хотя я еще не тестировал это, поэтому не забудьте проверить работу с NSZombies.
Примечание:
Единственным безопасным способом отмены объекта ASIHTTPRequest
является вызов его метода clearDelegatesAndCancel
. Я был укушен некоторыми неприятными ошибками, когда я просто использовал простой cancel
.