ios – 是否可以检查主线程是否空闲排出主运行循环?

ios – 是否可以检查主线程是否空闲排出主运行循环?,第1张

概述我刚刚阅读了以下文章并试图实现其中描述的方法: Writing iOS acceptance tests using Kiwi – Being Agile 那里描述的所有东西确实很有效.但!当我进行验收测试时,有一件事打破了决定论. 这是Github上的回购,帖子的作者推动了他的实验(可以在评论的页面底部找到):https://github.com/moredip/2012-Olympics-iO 我刚刚阅读了以下文章并试图实现其中描述的方法:

Writing iOS acceptance tests using Kiwi – Being Agile

那里描述的所有东西确实很有效.但!当我进行验收测试时,有一件事打破了决定论.

这是Github上的回购,帖子的作者推动了他的实验(可以在评论的页面底部找到):https://github.com/moredip/2012-Olympics-iOS–iPad-and-iPhone–source-code/tree/kiwi-acceptance-mk1

考虑一下他用来点击视图的代码:

- (voID) tapVIEwViaSelector:(Nsstring *)vIEwSelector{    [UIautomationBrIDge tapVIEw:[self vIEwViaSelector:vIEwSelector]];    sleepFor(0.1); //ugh}

… sleepFor有following definition behind itself:

#define sleepFor(interval) (CFRunLoopRunInMode(kcfRunLoopDefaultMode,interval,false))

这是一个天真的尝试(‘天真’不是关于作者,而是关于这个事实,它是第一个陷入困境的事实)等待一小段时间,直到所有的动画都被处理并浸泡所有可能的已经(或可能)被安排到主要运行循环的事件(另见this comment).

问题是这个天真的代码不能以确定的方式工作.在当前编辑的文本字段的键盘消失之前,有一串UI交互导致fx下一个按钮点击,等等……

如果我只是将时间从0.1增加到fx 1,则所有问题都会消失,但这会导致每次单独的交互,例如“用文本填充文本字段……”或“带标题的按钮”……第二!

所以我并不仅仅意味着在这里增加一个等待时间,而是一种做出这种人工等待的方法,保证我可以继续下一步的测试用例.

我希望它应该是一种更可靠的方式来等待所有由当前动作(所有转换/动画或任何主要运行循环的东西)引起的东西完成.

总结一下这是一个问题:

有没有办法耗尽/排出/浸泡所有调度到主线程及其运行循环的东西,以确保主线程空闲且其运行循环是“空”?

这是我最初的解决方案:

// DON'T like itstatic inline voID runLoopIfNeeded() {    // https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFRunLoopRef/Reference/reference.HTML    while (CFRunLoopRunInMode(kcfRunLoopDefaultMode,0.1,YES) == kcfRunLoopRunHandledSource);    // DON'T like it    if (CFRunLoopRunInMode(kcfRunLoopDefaultMode,YES) == kcfRunLoopRunHandledSource) runLoopIfNeeded();}
解决方法 你可以试试这个

while (CFRunLoopRunInMode(kcfRunLoopDefaultMode,true) == kcfRunLoopRunHandledSource);

这将运行直到运行循环中没有更多的东西.如果0不起作用,您可以尝试将时间间隔更改为0.1.

@H_419_64@ 总结

以上是内存溢出为你收集整理的ios – 是否可以检查主线程是否空闲/排出主运行循环?全部内容,希望文章能够帮你解决ios – 是否可以检查主线程是否空闲/排出主运行循环?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1065156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存