2017-01-29 8 views
0

Я реализую контактный модуль, в основном добавляя, удаляя, ища и перечисляя контакты.Что такое nsoperation? Как его использовать?

Здесь я использовал файл, чтобы сохранить данные, такие как сохранение всех контактов в файле (формат json) и десериализация обратно к объекту.

Теперь моя цель - выполнять функции сериализации и десериализации в фоновом потоке с использованием nsoperation. И как один класс расширяет nsopertions и что делать в этом классе.

Я новичок в mac os.And я не могу понять, что именно означает nsoperation? Как использовать его в моем модуле. Как заставить их работать одновременно. Я видел много учебников, но все же это очень неуклюжий для меня. Я действительно нуждаюсь в помощи. Спасибо заранее.

+3

Вы читали документацию от Apple ? Что вы не поняли? Вы также читали о GCD? Смотрели видео в WWDC? – gnasher729

ответ

1

У нас есть много ответа на ваш вопрос

Что такое NSOperation?

First Apple Reference Says

Класс NSOperation является абстрактным классом, который используется для инкапсуляции кода и данных, связанных с одной задачей. Поскольку он абстрактный, , вы не используете этот класс напрямую, а вместо этого подкласса или используете один из системных подклассов (NSInvocationOperation или BlockOperation) для выполнения фактической задачи. Несмотря на то, что абстрактность, , базовая реализация NSOperation включает в себя значительную логику для координации безопасного выполнения вашей задачи. Наличие этой встроенной логики позволяет сосредоточиться на фактической реализации вашей задачи, а не на коде клея, необходимой для обеспечения правильной работы с другими системными объектами.

Then Simple meaning of NSOperation

NSOperation представляет собой одну единицу работы. Это абстрактный класс , который предлагает полезную, потокобезопасную структуру для состояния моделирования, приоритет, зависимости и управление.

Вам нужно запустить его одновременно?

What is Concurrency?

Делая несколько вещей одновременно.

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

Выполнение нескольких программ параллельно.

Почему NSOperationQueue?

В ситуациях, когда NSOperation не имеет смысла, чтобы пристроить пользовательский подкласс NSOperation, Фонд предоставляет конкретные реализации NSBlockOperation и NSInvocationOperation.

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

Но просто обертывание вычислений в объект не делает многого без немного недосмотра. Вот где NSOperationQueue приходит в

Что такое NSOperationQueue?

NSOperationQueue регулирует одновременное выполнение операций. Она выступает в качестве приоритетной очереди, таким образом, что операции, которые выполняются в примерно First-In-First-Out образом с более высоким приоритетом (NSOperation.queuePriority) те, получая, чтобы перейти вперед с более низким приоритетом из них. NSOperationQueue также может ограничить максимальное число одновременных операций, выполняемых в любой момент времени, с использованием свойства maxConcurrentOperationCount.

NSOperationQueue сам опирается на Центральную диспетчерскую очередь, , хотя это частная деталь реализации.

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

Also

очереди Операция обычно предоставляют нити, используемые для выполнения своих операций. В OS X версии 10.6 и более поздних операционных очередях используется библиотека libdispatch (также известная как Grand Central Dispatch), чтобы инициировать выполнение своих операций. В результате операции всегда выполняется в отдельном потоке, независимо от того, являются ли они обозначены как одновременно или не параллельными операциями

Так что ваш код должен быть

NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init]; 
[backgroundQueue addOperationWithBlock:^{ 

    //Your Background Work kHere 
    ..... 

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 

     //Your Main Thread(UI) Work Here 
     .... 
    }]; 
}];