iphone Отмена асинхронного NSURLConnection - PullRequest
0 голосов
/ 28 октября 2009

Я столкнулся с ситуацией, когда мой класс выполняет один асинхронный веб-вызов, а пользователь запрашивает еще один (перемещая карту) и не может корректно отменить NSURLConnection. Я видел несколько решений для управления несколькими асинхронными вызовами, но я не хочу этого делать, потому что, как только второй запрос сделан, меня больше не волнует первый. Я вижу, что есть метод отмены, но я пробовал вызывать его только тогда, когда соединение равно nil, но соединение никогда не становится нулевым, несмотря на освобождение этого объекта. У кого-нибудь есть пример кода правильной отмены асинхронного NSURLConnect?

1 Ответ

3 голосов
/ 28 октября 2009

Я не думаю, что вы понимаете передачу сообщений Objective C или сохраняете / выпускаете. Отправка сохранения или выпуска объекту никогда не приведет к тому, что указатель, который вы удерживаете для этого объекта, станет нулевым (хотя объект может больше не быть действительным). Другими словами:

id a = b;
[a release];

//since release never changes the value of a
assert(a == b);

Итак, сказав, что, если каким-то образом код выпуска изменит значение указателя объекта, для которого вы назвали его, на nil, то отправка ему другого сообщения ничего не изменит. Сообщения на ноль молча отбрасываются. Помните, что вы держите указатель на объект, а не сам объект.

Сказав это, если вы хотите отменить NSURLConnection. Вы должны отправить ему отмену до того, как отпустите ее (как правило, отправка сообщения объектам после того, как вы их отпустили, некорректна).

Очень рекомендую прочитать документацию по управлению памятью Apple .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...