我创建了NSOperation的自定义子类,并且覆盖了main
方法。
@interface WGTask : NSOperation
@property(readonly) BOOL isExecuting,isFinished;
@end
@implementation WGTask
@synthesize isExecuting,isFinished;
- (void)start {
...
[self willChangeValueForKey:@"isFinished"];
isFinished=YES;
[self didChangeValueForKey:@"isFinished"];
...
}
@end
但是此代码会引发EXC_BAD_ACCESS错误。删除
[self didChangeValueForKey:@"isFinished"]
和[self willChangeValueForKey:@"isFinished"]
可以解决问题,但是即使正确更新了isFinished
值,NSOperationQueue也不会删除该操作! 最佳答案
我的错。在调用[self willChangeValueForKey:@"isFinished"]
之前,我正在调用自定义子类的委托方法,在该方法中我释放了任务本身。这就是为什么我得到EXC_BAD_ACCESS错误的原因,因为self
不再存在。