轮询vs KVO / NSNotification /代理

时间:2018-12-13 00:29:03

标签: objective-c macos objective-c-blocks

我在Mac上有一个工具,该工具具有数据处理界面,Web界面和UI。这三个接口在三个不同的串行(异步)dispatch_queues上运行。(UI在主队列上运行)

当Web界面接收到“停止”命令时,我的数据处理界面需要停止。数据处理dispatch_block没有任何依赖关系,只是它需要从Web界面侦听Stop命令。

我对应该如何设计数据块感到困惑,因此,我不必轮询Web界面来检查它是否收到了Stop命令。 我的数据块的堆栈非常深(很多函数调用),并且我不想在是否已调用Stop的情况下检入每个函数。 目的是在收到 Stop 命令后尽快停止。

我不能依靠isCancelled的{​​{1}}方法,因为我的数据块一直在运行,直到收到Stop。

我的目的不是要如何更好地设计接口,而是要在收到 Stop 命令时快速退出数据块。

我确实知道这是一个古老的问题,即如何始终避免检查变量。只是想知道是否有可以做的事情。

欢迎提出所有建议。

1 个答案:

答案 0 :(得分:4)

您不能仅仅杀死数据处理块。这将导致内存泄漏和不稳定状态。 NSNSOperation的<android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="320dp" android:layout_height="match_parent"> 方法是最好的方法。 Stop命令应设置一个数据处理块本地的变量,并在该块内部检查方便的位置并在设置该变量时清除并退出该变量。