有可能这种行为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中)来排队一个方法调用,在下一个运行循环中运行一次?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)