2010-07-08 2 views
1

У меня есть ситуация, подобная этой: Objective-C: How to use memory managment properly for asynchronous methodsПравильное обращение с асинхронным NSObject

У меня есть объект, который асинхронно загружает & разбирает XML-документ. Затем он имеет метод делегата, который передает полученные данные вызывающему.

Мои 2 вопроса:

Когда я выпускаю данные извлечения объекта? Ссылка, которую я опубликовал выше, дает 2 ответа, один говорит о выпуске в делегате, и один говорит о выпуске немедленно, что правильно (или что лучше, если оба ответа верны)

Мой второй вопрос: какой лучший способ передавать полученные данные вызывающему абоненту? На данный момент у меня

self.imagesDataSource = [articleImagesParserObject.returnedArray copy]; 

я использовал копию, потому что, насколько я понимаю, что делает изменяемый массив неизменны. Это верно?

+0

Возможно, я должен добавить, что я не ищу, чтобы кто-то «выполнял мою домашнюю работу для меня», я пытаюсь научиться, объясните, почему что-то не так, и почему вы делаете что-то определенным образом. –

ответ

0

Я собираюсь забрать вас на пару вещей .. Она может начать мяч прокатки :)

Вы говорите

Затем есть метод делегата, который передает данные он извлекается в вызывающие

- EDIT -
вы имеете в виду, что вы отправляете сообщение для делегата NSURLConnection в. Да, это просто семантика, но это яснее.

Вы говорите

Ссылка я отвечал выше, дает 2 ответов, один говорит, релиз в делегате и один говорит релиз сразу

Почты связывание говорит, что если вы запустите свой дополнительный поток с помощью NSThread +detachNewThreadSelector:toTarget:withObject:, поток сохранит ваш объект, поэтому, если вы закончите с ним, вы можете его освободить, как это обычно бывает. Вы этого не делаете.

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

Копирование измененного массива дает вам неизменную копию, которой вы владеете, поэтому она должна быть self.imagesDataSource = [[articleImagesParserObject.returnedArray copy] autorelease], если imagesDataSource не сохраняется - что было бы нерегулярно.

+0

Если вы никогда не слышали о методах делегата, вы не можете прочитать документацию Apple. Шаблон делегирования используется повсеместно, а термин «метод делегирования» содержится в документах для каждого класса, использующего шаблон. – Chuck

+0

Я думаю, у вас может быть объект-делегат, который обязательно имеет методы.Но рассмотрите экземпляр NSTableView; Я не могу сказать: «Я хотел бы [obj1 hasBeans] быть методом делегата для textShouldBeginEditing :, я хотел бы [obj78 isVisible] быть методом делегата для textShouldEndEditing :. Нет, я могу установить объект делегирования, но это все. Кроме того, OP объединяет делегирование и обмен сообщениями. – hooleyhoop

+0

Conflating? Ваш abyssopelagic ответ плеоназмом, что запутывает любую информацию, которую он мог бы содержать ;-) Шутки в сторону, хотя делегат метода: http://en.wikipedia.org/wiki/Delegation_pattern http://cocoadevcentral.com/articles /000075.php –

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