私はカスタムカメラアプリケーションを開発しています。私がしているのは、カメラを使用して写真を撮り、それらを同じVC画面の下部に表示することです。
画像をローカル辞書とNSDocumentディレクトリパスに保存しています。画像がローカル辞書にある場合はローカル辞書から取得し、そうでない場合はNSDocumentディレクトリパスから取得します。
メモリ警告を受け取った後、辞書をゼロにするだけなので、NSDocumentディレクトリパスから画像を取得します。
両方を使用すると、遅いプロセスで画像が表示されます。私のUIは、画像の表示にそれほど適していません。
そこで、NSOperationを使用してNSDocumentディレクトリパスに画像を保存したいと思います。
NSOperationについてはあまり知識がありません。 Googleで検索しましたが、Objective Cでヘルプが必要なときに、Swiftチュートリアルを取得しています。
では、NSOperation
とNSOperationQueue
を例を挙げて説明してもらえますか?
各作品にこれを適用します:
// 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
});
});
これらをもっと試してください:
Swift3操作キューを作成する
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
}];