我有一个在后台运行本机代码的线程,每隔一段时间就会触发一些回调。本机回调调用objective-C方法。对于每个调用,我基本上重绘东西或改变我的类的一些值。所以我会遇到很多同步问题。
是否有可能通过而不是锁定来解决这个问题,只是在每次回调时执行performSelectorOnMainThread?这会阻止同步问题还是太过分了?
答案 0 :(得分:1)
任何绘图必须在主线程上进行,因此即使您使用锁定,也需要-performSelectorOnMainThread
之类的内容。
您可能还希望查看为回调使用块和调度队列,以便在没有显式锁定的情况下处理同步问题。 Apple Concurrency Programming Guide有很多关于使用块和调度队列作为线程/锁的替代方法的信息。块和队列是在C级(而不是Objective-C)实现的,因此您可以轻松地将它们添加到C代码中(我假设这是“本机”的意思)而无需将内容重写为Objective-C。
(请注意,当使用块进行回调时,您仍需要确保将UI绘图操作分派到主队列,以便它们在主线程上运行。)