iOS10调度组处理通知问题

记近期处理iOS10的通知时遇到的一个坑:

iOS10的取消未展示通知方法removePendingNotificationRequestsWithIdentifiers:和removeAllPendingNotificationRequests方法是异步执行的,导致不能取消,而引起用户已取消的通知仍会提醒。。。

异步执行

在解决该问题时想到了“调度组”,将该异步执行的方法放入调度组中,使用调度组进行监听,同时暂时阻塞处理该方法的队列,等处理完成后再在该队列进行后续通知用户或发出刷新UI通知操作~

代码:

dispatch_queue_tqueue = dispatch_get_global_queue(0,0);

dispatch_group_tgroup = dispatch_group_create();

dispatch_group_enter(group);

dispatch_async(queue, ^{

[center removePendingNotificationRequestsWithIdentifiers:@[keys]];

dispatch_group_leave(group);

});

dispatch_group_notify(group, queue, ^{

// 开始调度的通知

});

// 用户提醒  正在处理中

// DISPATCH_TIME_FOREVER表示一直等待该任务,直到执行结束该队列的阻塞才会被取消

dispatch_group_wait(group,DISPATCH_TIME_FOREVER);

因为处理取消的操作系统执行速度比较快,对于主队列的阻塞并不会太长所以采取了这种方式,有大神会有好的方法还请不吝赐教~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 担心了两周的我终于轮到去医院做胃镜检查了!去的时候我都想好了最坏的可能(胃癌),之前在网上查的症状都很相似。...
    Dely阅读 9,402评论 21 42
  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 955评论 0 3
  • GCD笔记 总结一下多线程部分,最强大的无疑是GCD,那么先从这一块部分讲起. Dispatch Queue的种类...
    jins_1990阅读 838评论 0 1
  • 一、多线程简介: 所谓多线程是指一个 进程 -- process(可以理解为系统中正在运行的一个应用程序)中可以开...
    寻形觅影阅读 1,184评论 0 6
  • Managing Units of Work(管理工作单位) 调度块允许您直接配置队列中各个工作单元的属性。它们还...
    edison0428阅读 8,230评论 0 1

友情链接更多精彩内容