从另一个View Controller停止dispatch_async内部的无限while循环

多米诺克

我正在构建一个简单的聊天室应用程序,其中有一个NSURLConnection sendSynchronousRequest:将请求发送到服务器进行长轮询。我想显示一个流,该流在后台运行时始终向我的用户更新聊天提要。

我的应用程序还允许用户更改其聊天室,因此我需要关闭一个NSURLConnection并为相应的供稿打开另一个。

我当前的实现如下:

//in ViewController.m

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(concurrentQueue, ^{
            while (longPollBOOL){
            NSArray *MSG = [self.currentChatFeed longPoll]; //infinitely call longPoll method
                dispatch_sync(dispatch_get_main_queue(), ^{
                    if (MSG.count != 0) //if the longPoll method returns a non-empty array, stick it into the message feed on the device.
                    {
                        for (id element in MSG)
                        {
                            [self.messages addObject:element];
                            [self finishReceivingMessage];
                        }
                    }
                });
            }

        });

我正在尝试通过设置BOOL = NO来终止while循环,但是它不起作用。应用中的另一个View Controller正在发送BOOL = NO。我想保证在开始另一个聊天室的另一个无限循环之前,该循环已停止。

在开始另一个长轮询过程之前,我想杀死一个给定聊天室的漫长轮询过程。有任何想法吗?

我这样做正确吗?

保罗

如果要取消任务,最好使用NSOperations对其建模您可以轻松地做到这一点而无需子类化:

NSBlockOperation *blockOperation = [[NSBlockOperation alloc] init];

__weak __typeof(blockOperation) weakBlockOperation = blockOperation;

[blockOperation addExecutionBlock:^{
  while (!weakBlockOperation.isCancelled) {
    NSArray *MSG = [self.currentChatFeed longPoll]; //infinitely call longPoll method
    dispatch_sync(dispatch_get_main_queue(), ^{
      if (MSG.count > 0) {
        for (id element in MSG) {
          [self.messages addObject:element];
          [self finishReceivingMessage];
        }
      }
    });
  }
}];

[queue addOperation:blockOperation];

比起您只需要保留对操作的引用,您就可以随时取消它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个View Controller中停止线程

来自分类Dev

从另一个View Controller使用原型单元

来自分类Dev

从一个View Controller导航到另一个

来自分类Dev

如何从另一个View Controller访问Tab View Controller

来自分类Dev

从另一个View Controller Swift 2.0更改View Controller图像

来自分类Dev

在另一个内部选择

来自分类Dev

R for 循环在另一个

来自分类Dev

将UISwitch状态从一个View Controller传递到另一个ViewController

来自分类Dev

从SplitViewController中的MasterViewController切换到另一个View Controller

来自分类Dev

推送到另一个View Controller占用iPhone太多时间

来自分类Dev

将Core Data对象从DetailViewController传递到另一个View Controller

来自分类Dev

[iOS]:检测从另一个外部应用返回后何时显示View Controller

来自分类Dev

在另一个View Controller中调用方法,但不能选择吗?

来自分类Dev

如何从另一个View Controller中的变量获取值

来自分类Dev

快速启动屏幕动画后更改为另一个View Controller

来自分类Dev

推送到另一个View Controller占用iPhone太多时间

来自分类Dev

将数据传递到另一个View Controller不起作用

来自分类Dev

将核心数据对象从UITableViewCell传递到另一个View Controller

来自分类Dev

在另一个类中运行循环时更新View?

来自分类Dev

Qt无限循环在另一个线程

来自分类Dev

另一个无限的$ digest循环

来自分类Dev

调用另一个函数后,For循环停止

来自分类Dev

另一个内部的for循环不起作用

来自分类Dev

PHP从另一个文件中断WHILE循环

来自分类Dev

如何在WatchOS 2和Swift中将变量从一个View Controller传递到另一个View Controller

来自分类Dev

使用按钮操作将数据从一个View Controller转发到另一个View Controller的方法有哪些?

来自分类Dev

在另一个循环停止的地方开始一个循环

来自分类Dev

在另一个循环停止的地方开始一个循环

来自分类Dev

PHP While 循环在另一个内部,第一个 while 不返回其他值

Related 相关文章

  1. 1

    在另一个View Controller中停止线程

  2. 2

    从另一个View Controller使用原型单元

  3. 3

    从一个View Controller导航到另一个

  4. 4

    如何从另一个View Controller访问Tab View Controller

  5. 5

    从另一个View Controller Swift 2.0更改View Controller图像

  6. 6

    在另一个内部选择

  7. 7

    R for 循环在另一个

  8. 8

    将UISwitch状态从一个View Controller传递到另一个ViewController

  9. 9

    从SplitViewController中的MasterViewController切换到另一个View Controller

  10. 10

    推送到另一个View Controller占用iPhone太多时间

  11. 11

    将Core Data对象从DetailViewController传递到另一个View Controller

  12. 12

    [iOS]:检测从另一个外部应用返回后何时显示View Controller

  13. 13

    在另一个View Controller中调用方法,但不能选择吗?

  14. 14

    如何从另一个View Controller中的变量获取值

  15. 15

    快速启动屏幕动画后更改为另一个View Controller

  16. 16

    推送到另一个View Controller占用iPhone太多时间

  17. 17

    将数据传递到另一个View Controller不起作用

  18. 18

    将核心数据对象从UITableViewCell传递到另一个View Controller

  19. 19

    在另一个类中运行循环时更新View?

  20. 20

    Qt无限循环在另一个线程

  21. 21

    另一个无限的$ digest循环

  22. 22

    调用另一个函数后,For循环停止

  23. 23

    另一个内部的for循环不起作用

  24. 24

    PHP从另一个文件中断WHILE循环

  25. 25

    如何在WatchOS 2和Swift中将变量从一个View Controller传递到另一个View Controller

  26. 26

    使用按钮操作将数据从一个View Controller转发到另一个View Controller的方法有哪些?

  27. 27

    在另一个循环停止的地方开始一个循环

  28. 28

    在另一个循环停止的地方开始一个循环

  29. 29

    PHP While 循环在另一个内部,第一个 while 不返回其他值

热门标签

归档