如何在 Objective-C 中使用 NSOperation 和 NSOperationQueue?

How to use NSOperation & NSOperationQueue in Objective-C?

我正在开发自定义相机 application.What 我正在做的是,我正在使用相机拍照并将它们显示在相同的 VC 屏幕底部。

我将图像存储在本地字典和 NSDocument 目录路径中。如果图片在本地词典中,它将从本地词典中获取,否则它将从 NSDocument 目录路径中获取。

在收到内存警告后,我只是将字典归零,所以它会从 NSDocument 目录路径中获取图像。

同时使用两者将显示图像缓慢 process.My UI 在显示图像方面效果不佳。

所以我想使用 NSOperation 将图像存储在 NSDocument 目录路径中。

我对NSOperation了解不多。我在 google 中搜索过,我只是得到 swift 教程,而我在 Objective C.

中需要帮助

所以请谁能举例说明 NSOperationNSOperationQueue

斯威夫特3 创建一个操作队列

lazy var imgSaveQueue: OperationQueue = {
    var queue = OperationQueue()
    queue.name = "Image Save Queue"
    queue.maxConcurrentOperationCount = 1
    return queue
}()

为其添加操作

imgSaveQueue.addOperation(BlockOperation(block: { 
       //your image saving code here 
    }))

对于Objective C:

[[NSOperationQueue new] addOperationWithBlock:^{ 

      //code here 

}];

将此应用于每项工作:

        // Allocated here for succinctness.
        NSOperationQueue *q = [[NSOperationQueue alloc] init];

        /* Data to process */
        NSData *data = [@"Hello, I'm a Block!" dataUsingEncoding: NSUTF8StringEncoding];

        /* Push an expensive computation to the operation queue, and then
         * display the response to the user on the main thread. */
        [q addOperationWithBlock: ^{
            /* Perform expensive processing with data on our background thread */
            NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];



            /* Inform the user of the result on the main thread, where it's safe to play with the UI. */

            /* We don't need to hold a string reference anymore */

        }];

你也可以在没有 NSOperationQueue 的情况下申请 :

       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            // Your Background work

            dispatch_async(dispatch_get_main_queue(), ^{
                // Update your UI


            });
        });

再试试这些:

  1. NSOperationQueue addOperationWithBlock return to mainQueue order of operations

  2. http://landonf.org/code/iphone/Using_Blocks_1.20090704.html

  3. https://videos.raywenderlich.com/courses/introducing-concurrency/lessons/7