(читаю ваш комментарий к другому вопросу)
После реализации еще нескольких модулей с использованием 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's properties.
[self.request setCompletionBlock:^{
if([weakRequest responseStatusCode] == 200)
// ...
Таким образом, вы все равно можете контролировать self.request
даже после запуска запроса (например, для отмены). Вы можете сделать self.request = nil;
, когда будете готовы отпустить ваш запрос, возможно, внутри вашего блока завершения или self.request
методов очистки родительского объекта.
Обновление:
Если вы ориентируетесь на версию, предшествующую iOS 5, то общепринятая позиция: используйте __unsafe_unretained
вместо __weak
. Это нормально, потому что, глядя на ASIHTTPRequest.m
, блоки nil
'выделены в dealloc()
(то есть они не должны выполняться). Хотя я еще не проверял это, поэтому убедитесь, что все еще тестируете с включенным NSZombies.
Примечание:
Единственный безопасный способ отменить объект ASIHTTPRequest
- вызвать его метод clearDelegatesAndCancel
. Меня укусили некоторые неприятные ошибки, когда я просто использовал простой cancel
один.