gpt4 book ai didi

iphone - 防止方法被不同实体同时调用的优雅方式

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:05 24 4
gpt4 key购买 nike

我有一个方法,someMethod,它在 a) 用户点击 View 和 b) 用户拖动 View 时被调用。在 someMethod 中,有一个 UIView animateWithDuration block 使 View 顶部的工具栏消失,并相应地重置其框架。如果用户点击 View 而不是拖动它,someMethod 将在动画仍在完成时被触发,这不是我想要的行为(简单地取消动画不起作用,因为完成 block 仍然会触发(即使我检查了“完成” bool 值)。考虑到所有因素,我只是不希望在动画仍在进行时触发此方法。

显然,一个简单的解决方案是使用 BOOL 设置手动锁,并且只允许在锁空闲时调用该方法。

我想知道,是否有更优雅的方法来实现这一点?可以使用 GCD 或其他一些库来完成此操作,这样它就更安全了吗?

更新:我确实尝试使用同步,但问题是该方法触发动画,完成,但动画仍在另一个线程上运行。还有其他想法吗?

最佳答案

计时器用完并不意味着或需要辅助线程。您可以控制将计时器安排在哪个线程上。如果您只是在主线程上安排计时器,那么这两件事都会在主线程上发生。

使用@synchronized 的建议实现了给定代码块不为同一对象运行的效果(无论@synchronized 的参数是什么)同时,但这与说它不在两个不同的线程上运行不是一回事。

如果想检测某个方法是否在主线程以外的线程调用,然后分流到主线程,可以使用+[NSThread isMainThread] dispatch_async(dispatch_get_main_queue(), ^{/* 重新调用当前方法 */});.

关于iphone - 防止方法被不同实体同时调用的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com