【发布时间】:2015-08-26 09:09:36
【问题描述】:
我的 NSOperationQueue 运行在另一个线程上,而不是整个应用程序。我正在将 NSOperation 添加到 main 中的队列中
-(void)main{
[self updatePallets];
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval: 5.0 target:self selector: @selector(updatePallets) userInfo: nil repeats: Yes];
NSRunLoop * runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode: NSRunLoopCommonModes];
[runLoop run];
}
它可以按我的意愿正常工作。但是如何取消这种类型的操作。例如,在我的主线程上,我想做这样的事情:
[queue cancelAllOperations];
[queue waitUntilAllOperationsAreFinished];
我想挂起主线程并等待它完成。然后执行一些动作。但是它不会取消任何操作(定时器只有一个)我该怎么办?我还尝试在调度程序弹出时间后向队列添加新操作,但仍然无法停止。
【问题讨论】:
-
您是否使计时器无效?
[timer invalidate] -
不,我只是试图取消操作。所以我需要参考计时器......是否可以取消所有操作,然后停止所有操作?我可以在runLoop中添加一些条件吗?
-
我不确定 cancelAllOperations。但是对于 NSTimer,我使用的是
[timer invalidate] -
我创建了
@property (strong, atomic) NSTimer * timer和方法-(void)stopOperation{[self.timer invalidate]}之后我从队列中获取所有操作并设置它们stopOperation然后我把cancelAllOperations 放在那里,然后再次从队列中获取所有操作有timer = nil所以应该停止并从队列中删除? -
嗯,我会赞成这个问题让其他兄弟注意到。
标签: ios objective-c multithreading nsoperation nsoperationqueue