何时/如何删除本地声明的操作队列?

时间:2014-01-15 17:31:07

标签: objective-c

我的代码将收到一个推送通知,其中包含要下载和显示的远程图像的URL,我计划在操作队列中调用NSData:dataWithContentOfURL以与主线程分开运行。 但我不清楚操作的生命周期以及何时/如何删除它。 例如,假设我的代码与此类似:

- (void) onReceiptOfPushNotification:(NSURL*) url
{
    NSOperationQueue *q = [[NSOperationQueue alloc] init];
    [q addOperationWithBlock: ^{
        NSData*  data = [NSData dataWithContentsOfURL: url];
        [[NSOperationQueue mainQueue] addOperationWithBlock:^ {
            do stuff with the data and image
        }
    }
}

我的问题是,q是onReceiptOfPushNotification的局部变量,然后在操作完成后何时以及如何删除它?

2 个答案:

答案 0 :(得分:1)

根据Apple文档, 操作只有在完成执行后才会从队列中删除。但是,为了完成执行,必须首先启动操作。由于挂起的队列不会启动任何新操作,因此它不会删除当前已排队且未执行的任何操作(包括已取消的操作)。

因此,在NSOperation完成任务后,它将自动从队列中删除。

请参阅here链接,其中包含每个&每一个细节。

希望有所帮助。

答案 1 :(得分:0)

推送通知有一个委托,在每个通知上都会调用application:didReceiveRemoteNotification:您可以使操作对象成为单例并在委托中重置它。