我有两个不同的NSOperation子类。一个从服务器下载提要,另一个从中进行解析。

@interface FeedDownloader:NSOperation
 @property(nonatomic, strong) NSString *downloadedFeed;
@end

@interface FeedParser:NSOperation
 @property(nonatomic, strong) NSString *feedToParse;
@end

然后,在我的“视图控制器”中,将这些操作添加到NSOperationQueue中并设置依赖项。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
FeedDownloader *downloader = [[FeedDownloader alloc] init];
FeedParser *parser = [[FeedParser alloc] init];
[parser addDependency:downloader];
[downloader addObserver:self forKeypath: @"isFinished" context:kDownloaderContext];
[queue addOperation:downloader];
[queue addOperation:parser];

现在,我从下载器收到“KVO通知”,它已完成Feed的下载。一旦下载完成并且开始解析之前,我如何将下载的提要传递给解析器。

最佳答案

FeedParser类中,您可以确保isReady在设置了必需的数据之前不为真-这样,只有在具有依赖项时,操作才会过早开始。

有很多方法可以做到这一点-我想到的第一件事就是使用下载操作的完成块

__weak __typeof(parser)     weakParser     = parser;
downloader.completionBlock = ^{
  weakParser.feedToParse = downloader.downloadedFeed;
};

10-07 21:31