ios - NSOperation 依赖操作和依赖对象

标签 ios objective-c cocoa-touch cocoa nsoperation

我有两个不同的 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/

相关文章:

ios - swift 错误 : Struct 'XX' must be completely initialized before a member is stored to

ios - NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)Xamarin.Forms IOS

objective-c - 更改 NSMutableArray 中所有对象的属性

ios - PresentViewController 不适用于动画 :NO

objective-c - 自定义tableView : Corner radius, 减少宽度和阴影

ios - 强制 UIActivityViewController 以横向模式显示

ios - UIButton 的系统镜像出现在 iOS14 中,但不在 iOS13 中

objective-c - iPad应用程序奇怪的崩溃

ios - predicateWithFormat 非常慢

cocoa - 如何解决导致重复标注的 MapKit 错误?