1

多くの時間とリソースを必要とする画像処理があるため、callBack にNSOperation+ + デリゲートを使用します。NSOperatioQueueそしてすべての仕事。

たとえば、tableViewで使用するのが非常にエレガントで簡単なので、ブロックを使用したいと思います。

私がする必要があるのはAFJSONRequestOperation、たとえば次のようなものです:

NSURL *url = [NSURL URLWithString:@"url"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"App.net Global Stream: %@", JSON);
 } failure:nil];
[operation start];

この例では、 operationQueue が表示されません。どうすれば同じことができますか?

    [ImageManagerOperation modifyImage:(UIImage*)image completitionBlock:(void (^)(UIImage *modifiedImage))complete];

ここで、ImageManagerOperation は NSOperation です。

完了ブロックを設定できることはわかっていますが、操作をキューに追加する必要があります。

コードの行番号を最小限に抑えたい (可能であれば:))。

4

1 に答える 1

1

通常、 のコードNSOperationは同期的です。はNSOperationQueue、コードをバックグラウンドで実行するために必要なスレッドを提供します。startしたがって、操作をキューに追加すると、キューはバックグラウンド スレッドで操作を呼び出します。

AFJSONRequestOperationNSOperation呼び出された の特別なタイプですconcurrent。これは、操作が内部で独自のバックグラウンド スレッドを既に提供していることを意味します。状況によってstartは、操作のメソッドをconcurrentキューの外で呼び出すことがあります。操作は独自のバックグラウンド スレッドを既に提供しているため、引き続きバックグラウンドで実行されます。この場合start、例に示されているコードを最小限に抑えるために、 を直接呼び出すことができます。

通常は、管理やなど、キューが提供する他の機能を利用したいのでconcurrent、操作を に追加します。 NSOperationQueuedependanciesmaxConcurrentOperationCount

したがって、自分で を作成し、NSOperationQueueそれに操作を追加するだけです。startキューを呼び出す必要はありません。これが行われます。

于 2013-03-16T14:02:22.140 に答える