我的代码将收到一个推送通知,其中包含要下载和显示的远程图像的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的局部变量,然后在操作完成后何时以及如何删除它?
答案 0 :(得分:1)
根据Apple文档, 操作只有在完成执行后才会从队列中删除。但是,为了完成执行,必须首先启动操作。由于挂起的队列不会启动任何新操作,因此它不会删除当前已排队且未执行的任何操作(包括已取消的操作)。
因此,在NSOperation完成任务后,它将自动从队列中删除。
请参阅here链接,其中包含每个&每一个细节。
希望有所帮助。
答案 1 :(得分:0)
推送通知有一个委托,在每个通知上都会调用application:didReceiveRemoteNotification:您可以使操作对象成为单例并在委托中重置它。