1

У меня есть некоторые сомнения в ARC.ARC - popviewController/DismissViewController

В ARC: Когда диспетчер просмотра отклонен с помощью функции rejectViewController/popViewController, будет ли выделенная память автоматически освобождена?

Что произойдет, когда выполняется асинхронное NSURLConnection, и до того, как эта операция завершилась, диспетчер просмотра был уволен?

Спасибо

ответ

1

Когда вы уволите контроллер (или поместите его), он будет освобожден, если вы не сделаете никаких сильных указателей на него (этот контроллер удерживается контроллером навигации или контроллером представления, так что вы обычно не нужно иметь указатель на него, когда вы его создаете и нажимаете или представляете).

Если NSURLConnection выполняется, когда вы отклоняете контроллер, и этот контроллер является делегатом соединения (что является обычным случаем), тогда контроллер не будет освобожден до завершения соединенияDidFinishLoading или connectionDidFailWithError. Это связано с тем, что соединение все еще живое, и оно имеет сильный указатель на его делегат.

+0

Что произойдет с сильно заостренным delegete после подключенияDidFinishLoading или connectionDidFailWithError завершено? – SARANGA

+0

@SARANGA, он будет выпущен, если нет других сильных указателей на него. – rdelmar

+0

Ребята, пожалуйста, примите этот ответ, если кто-нибудь найдет это правильно. Благодарю. – SARANGA

0

Dismissviewcontroller остановит контроллер представления не отображалась. Фактический контроллер просмотра будет удален только из памяти в ARC, когда действительная переменная, относящаяся к контроллеру представления, выходит за пределы области видимости. Например.

ViewControllerType *vc = [[ViewControllerType alloc] init]; // Create it 
[self presentViewController:vc animated:TRUE completion:Nil]; // Present it 


vc = Nil; // Destroy it, or the method vc was declared inside is out of scope does the same 

Обычно вы не делаете Vc = Nil, а ОЕ все еще отображаются

Если вы позволите ViewController уволить до получения ответа на ваш NSURLConnection вы должны иметь дело в ответ резьбе NSURLConnection при условии, что ViewController больше не существует. Помните, однако, что ViewController все еще может быть в области видимости. Это действительно вопрос, на который можно ответить только с более пристальным вниманием к варианту использования и связанному с ним коду.

Смежные вопросы