В моем подклассе NSOperation я установил 4 флага, и когда операция завершает его выполнение, она не удаляется в очередь NSOperation, где она была добавлена в начале, эта вещь вызывает много проблем в моем приложении. Я полагаю, что способ, которым я устанавливаю эти флаги, неверен, не могли бы вы помочь с ним. потому что я действительно трачу много времени на выявление этой проблемы.Объект NSOperation не удаляется из NSOperationQueue после выполнения
@property(assign, nonatomic) BOOL isCancelled;
@property(nonatomic, getter=isExecuting) BOOL executing;
@property(nonatomic, getter=isFinished) BOOL finished;
@property(readonly, getter=isAsynchronous) BOOL asynchronous;
//in initialisation
- (id)initWithURL:(NSURL*)url andRaw:(NSInteger)row
{
if (![super init])
return nil;
[self setTargetURL:url];
return self;
}
//the way I override KVO
- (BOOL)isExecuting
{
NSLog(@"Exec");
return (self.defaultSession != nil);//it doesn't work
}
- (BOOL)isFinished
{
NSLog(@"Finished");
return (self.defaultSession == nil); //it doesn't work, so I explicitly set the value
}
- (BOOL)isAsynchronous
{
return YES;
}
- (void)cancel
{
[super cancel];
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
self.isExecuting = NO;
self.isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
[self didChangeValueForKey:@"isExecuting"];
if(self.downloadTask.state == NSURLSessionTaskStateRunning)
[self.downloadTask cancel];
[self finish];
}
- (void)finish
{
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
self.defaultSession = nil; //NSURLSession
self.isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
[self didChangeValueForKey:@"isExecuting"];
}
Спасибо заранее
EDIT: , наконец, я нашел проблему - это NSURLSession внутри очереди. Он постоянно ссылался на очередь и не позволял ему освобождаться и удаляться из NSOperationQueue.
Спасибо, я постараюсь выполнить ваши инструкции, и, к сожалению, я не являюсь подписчиком Рэя Вендерлиха ( – Melany
). Я бы очень рекомендовал стать одним из них, если можно. У них есть несколько удивительных уроков. Https: // www .raywenderlich.com/video-tutorials – shrutim
ОК, может быть, я начну, если удастся справиться с этой проблемой) – Melany