Сохранение операции NSOperatioQueue - PullRequest
0 голосов
/ 18 февраля 2012

Я все еще работаю над пониманием NSOperations. Я хочу, чтобы пользователь мог инициировать HTTP-запрос, инкапсулировать этот запрос в объект NSOperation, а затем забыть об этом. Я хотел бы выпустить объект NSOperation в моем основном коде, но оставить его в NSOperationQueue.

Каждая операция NSO завершается сохранением результата в основных данных, или его можно отменить. Тем не менее, я думаю, что мне нужно только отменить все незавершенные операции, а не отдельные операции. Я мог бы отменить их все, если приложение закрывается, например.

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

Верно ли, что очередь сохранит операцию, поэтому я могу освободить ее там, где она была создана?

Кроме того, поскольку я новичок в ARC (я еще не пробовал), как я могу передать это право собственности? Я полагаю, что я хочу, чтобы NSOperation имел сильный атрибут свойства в очереди, но я не думаю, что хочу создать экземпляр с атрибутом слабого свойства.

1 Ответ

1 голос
/ 18 февраля 2012

Вы правы.NSOperationQueues сохраняет (сильная ссылка) NSOperations, добавленные к нему.Они автоматически удаляются из очереди и освобождаются по окончании операции.

Вы должны убедиться, что ваши подклассы NSOperation соответствуют KVO для isExecuting и isFinished, если NSOperationQueue не будет знать, завершена ли NSOperation.

Используя ARC, вам не нужно «передавать» право собственности в этом случае.Вы «передаете» право собственности только при создании объекта Core Foundation (методы, такие как CF * Create или CF * alloc) и назначаете его объекту Objective-C.

Я написал подробноо ARC в моем блоге , если вам интересно.

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

...