原来以为cancelAllOperations时,正在运行的operation的会停止,旦实际发现是不会的。
并且在operation运行结束前,ViewController是不会dealloc的。
实际上,cancelAllOperations的作用是将在队列里排队的operation从对列里移除。
测试代码如下:
#import "ViewController.h"
@interface ViewController ()
@property (retain,nonatomic)NSOperationQueue *pQueue;
@end
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
self.pQueue =[[NSOperationQueuealloc]init];
NSInvocationOperation *Invocation = [[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(downLoadImage)object:nil];
[self.pQueueaddOperation:Invocation];
UIButton* btn = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
btn.frame =CGRectMake(10,100, 300, 30);
[btn setTitle:@"pop back"forState:UIControlStateNormal];
[btn addTarget:selfaction:@selector(popBack)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:btn];
}
-(void)popBack{
[self.pQueuecancelAllOperations];
[self.navigationControllerpopViewControllerAnimated:YES];
}
-(void)dealloc{
NSLog(@"ViewController dealloced");
}
- (void)downLoadImage
{
sleep(5);
NSLog(@"operation ended");
}
@end