objective-c – 有一种简单的方法(在CocoaiOS中)来排队一个方法调用,在下一个运行循环中运行一次?

objective-c – 有一种简单的方法(在CocoaiOS中)来排队一个方法调用,在下一个运行循环中运行一次?,第1张

概述UIView有一个setNeedsDisplay方法,可以在相同的事件循环中多次调用,安全的知道重画工作将很快发生,只有一次. 有可能这种行为Cocoa的通用机制吗?一种说法是,“选择器随机选择多次,当时候,选择器将运行一次并清除队列”. 我知道我可以通过我的目标中的某种状态跟踪或NSOperationQueue来执行此 *** 作.我只是想知道有没有一个轻巧的方法我错过了. (当然,答案可能是“不”.) UIVIEw有一个setNeedsdisplay方法,可以在相同的事件循环中多次调用,安全的知道重画工作将很快发生,只有一次.

有可能这种行为Cocoa的通用机制吗?一种说法是,“选择器随机选择多次,当时候,选择器将运行一次并清除队列”.

我知道我可以通过我的目标中的某种状态跟踪或NSOperationQueue来执行此 *** 作.我只是想知道有没有一个轻巧的方法我错过了.

(当然,答案可能是“不”.)

解决方法 setNeedsdisplay不是您正在描述的一个很好的例子,因为它实际上每次调用它时都会运行.它只是设置一个标志.但问题是好的.

一个解决方案是使用NSNotificationQueue与NSNotificationCoalescingOnname.

另一个解决方案是建立一个蹦床来做自己的聚结.我没有一个非常好的博客参考蹦床,但这是一个例子(LSTrampoline).如果您希望在一段时间内合并邮件,那就不难.我曾经建立一个具有forwardInvocation的蹦床:与此类似:

- (voID)forwardInvocation:(NSInvocation *)invocation {  [invocation setTarget:self.target];  [invocation retainArguments];  [self.timer invalIDate];  self.timer = [NSTimer scheduledTimerWithTimeInterval:self.timeout invocation:invocation repeats:NO];}

这实际上在所有时间段内将所有消息合并到对象(不仅仅是匹配消息).这就是我所需要的特定问题.但是您可以扩展这一点,以跟踪哪些选择器被合并,并检查您的调用以查看它们是否“足够”匹配.

要让它在下一个事件循环中运行,只需将超时设置为0.

我有关于蹦床的博客的含义.要求先令:我的upcoming book涵盖第4章和第20章中的蹦床.

总结

以上是内存溢出为你收集整理的objective-c – 有一种简单的方法(在Cocoa / iOS中)来排队一个方法调用,在下一个运行循环中运行一次?全部内容,希望文章能够帮你解决objective-c – 有一种简单的方法(在Cocoa / iOS中)来排队一个方法调用,在下一个运行循环中运行一次?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1029106.html

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

发表评论

登录后才能评论

评论列表(0条)

保存