Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
iOS-线程安全和performSelectorOnMainThread_Ios_Multithreading_Synchronization_Mutex - Fatal编程技术网

iOS-线程安全和performSelectorOnMainThread

iOS-线程安全和performSelectorOnMainThread,ios,multithreading,synchronization,mutex,Ios,Multithreading,Synchronization,Mutex,我有一个线程在后台运行本机代码,每隔一段时间就会触发一些回调。本机回调调用objective-C方法。对于每个调用,我基本上都在重新绘制内容或修改类的某些值。所以我会遇到很多同步问题 有没有可能通过在每个回调上执行performSelectorOnMainThread而不是使用锁来解决这个问题?这会防止同步问题吗?还是太麻烦了 任何绘图都必须在主线程上进行,因此即使使用锁,也需要执行类似于-performselectornmainthread的操作 您可能还希望研究使用块和回调调度队列来处理同步

我有一个线程在后台运行本机代码,每隔一段时间就会触发一些回调。本机回调调用objective-C方法。对于每个调用,我基本上都在重新绘制内容或修改类的某些值。所以我会遇到很多同步问题

有没有可能通过在每个回调上执行performSelectorOnMainThread而不是使用锁来解决这个问题?这会防止同步问题吗?还是太麻烦了

任何绘图都必须在主线程上进行,因此即使使用锁,也需要执行类似于
-performselectornmainthread
的操作

您可能还希望研究使用块和回调调度队列来处理同步问题,而不使用显式锁。苹果有很多关于使用块和调度队列作为线程/锁的替代品的信息。块和队列是在C级别实现的(不是Objective-C),因此您可以轻松地将它们添加到C代码中(我假设这就是您所说的“本机”)而无需将内容重写到Objective-C中


(请注意,当使用块进行回调时,您仍然需要确保将UI绘图操作分派到主队列,以便它们在主线程上运行。)

绘图部分在主线程中完成,就像我在主线程上“重新加载数据”一样。我想知道是否可以通过在主线程中对变量执行任何更新(例如删除/添加包含所有元素的数组中的元素,然后在主线程上重新加载数据)来解除锁定等