我有两个不同的 NSOperation
子类。一个从服务器下载提要,另一个进行解析。
@interface FeedDownloader:NSOperation
@property(nonatomic, strong) NSString *downloadedFeed;
@end
@interface FeedParser:NSOperation
@property(nonatomic, strong) NSString *feedToParse;
@end
然后,在我的“ View Controller ”中,我将这些操作添加到我的 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 通知”,它已完成下载提要。下载完成后和开始解析之前,我如何将下载的提要传递给解析器。
最佳答案
在您的 FeedParser
类中,您可以确保 isReady
不为真,直到它设置了所需的数据 - 这样操作就不会过早开始,直到它有它的依赖性。
有很多方法可以做到这一点——我首先想到的是使用下载操作的完成 block
__weak __typeof(parser) weakParser = parser;
downloader.completionBlock = ^{
weakParser.feedToParse = downloader.downloadedFeed;
};
关于ios - NSOperation 依赖操作和依赖对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680507/