iPhone NSURLC проблема инициализации соединения - PullRequest
0 голосов
/ 21 июля 2011

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

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:request delegate:self];

А где мне освобождать объект подключения после каждого didFinishLoading?но разве это не займет много времени на каждый запрос на подключение?

Ответы [ 3 ]

2 голосов
/ 21 июля 2011

Первый - это экземпляр NSURLConnection, где вы вступаете во владение объектом, поэтому вы несете ответственность и, следовательно, должны освободить его.Подробная информация о праве собственности .

Второй объект - автоматически высвобождаемый объект, поэтому вам не нужно его выпускать.Он будет освобожден автоматически при сливе пула автоматического выпуска.

2 голосов
/ 21 июля 2011

В первой строке вы создаете объект с помощью метода init, который делает вас владельцем объекта, поэтому вы должны освободить его. Во второй строке вы используете удобный конструктор, который не делает вас владельцем этого объекта. В этом случае, если вы хотите манипулировать жизненным циклом этого объекта, вы должны отправить другое сообщение, чтобы сохранить его: NSURLConnection * theConnection = [[ NSURLConnection connectionWithRequest: request делегат: self] retain], и количество объектов будет равно 2 ... даже если во второй строке ваш объект автоматически получит сообщение об автоматическом выпуске, число после этого будет равно 1 ... поэтому, если вы сохраните объект, вы должен отпустить ...

Вы спросили: а где мне освободить объект подключения? я думаю, в методе, называемом connectionDidFinishLoading: connection или в методе connection: didFailWithError:

2 голосов
/ 21 июля 2011

Второе создает автоматически высвобождаемое соединение, поэтому, если вы не сохраните его явно, оно исчезнет, ​​и ваше приложение, вероятно, вылетит.

Вы можете использовать любое из них, вам просто нужно понятьc управлением памятью на iPhone.

Как всегда, на сайте Apple есть хорошее объяснение , его действительно стоит прочитать и понять, потому что когда пенни упадет, вы никогда не будетеповторить ту же ошибку

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