【发布时间】:2013-12-07 06:21:10
【问题描述】:
我制作了NSOperation 的一个子类,叫做 ˚ 来实现多电影下载。在 appDelegate.m 中,我制作了 NSOperationQueue 的对象。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
queue = [[NSOperationQueue alloc] init];
[queue setMaximumConcurrentOperationCount:5]
}
MovieDownloadOperation 依赖于一个名为 Downloader 的类,它实际上会下载电影
并给出回调movieCompletelyDownloadedWithUrl: .
然后,我在MovieDownloadOperation 中创建了一个名为downloadState 的属性。它具有不同的值,例如 "STARTED" 、 "DOWNLOADING" 、 "COMPLETED" 、 "ERROR"。
MyDownloadOperation 看起来像
-(id)initWithUrl:(NSURL *)url
{
if (self = [super init])
{
_downloader = [[Downloader alloc] initWithUrl:url];
_downloadState = @"STARTED" ;
}
}
-(void)main
{
while(1)
{
if ([_downloadState isEqualToString:@"COMPLETED"])
{
NSLog(@"movie downloaded successfully");
break ;
}
}
}
-(void)movieCompletelyDownloadedWithUrl:(NSURL *)url
{
_downloadState = @"COMPLETED" ;
}
这适用于一部电影,但当我尝试下载多部电影时,UI 会冻结,直到下载第一部电影。我认为问题在于main 方法中的while 循环,有没有更好的方法来检查_downloadState 是否更改为"COMPLETED"??
【问题讨论】:
标签: ios iphone nsoperation nsoperationqueue