NSOperationQueue, память и GCD; как правильно реализовать?

У меня есть некоторые простые сомнения относительно NSOperation и GCD, на которые я не нашел ответа в документации.

Первый вопрос связан с управлением памятью:

Я хочу знать, нужно ли мне создавать пул Autorealease для методов, которые я добавлю в NSOperationQueue; аналогично тому, когда вы запускаете метод в другом потоке без NSOperations.

Следующий вопрос: NSOperation заботится о НОД или это нужно делать вручную?

Спасибо за помощь!


person Zebs    schedule 20.03.2011    source источник


Ответы (2)


Согласно документация, вы должны создать NSAutoreleasePool в методе main вашего NSOperation. В документации для NSInvocationOperation и NSBlockOperation не указано, создают ли они для вас пул автоосвобождения, поэтому для безопасности было бы лучше создать его и при использовании этих классов.

NSOperationQueue обрабатывает очередь и выполнение операций, поэтому вам не нужно самостоятельно возиться с GCD для задач, связанных с очередью операций.

person Anomie    schedule 20.03.2011

Я только что увидел ваш вопрос здесь, и есть сообщение на форумах разработчиков Apple, которое может вас заинтересовать. , По словам одного из парней из Apple в этой теме, пока вы запускаете свою NSOperation через NSOperationQueue, вам не нужно создавать собственный пул автоматического выпуска, поскольку NSOperationQueue делает это за вас.

Также документы для NSOperationQueue, по-видимому, нуждаются в обновлении/исправлении. На устройствах под управлением iOS 4 или более поздней версии NSOperationQueue использует GCD, несмотря на то, что говорится в справочных документах по классам.

person Cyrus Fisher    schedule 22.03.2011