我创建了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不再存在。

10-08 18:05