Ios 需要特定线程的可靠方法
给定必须在主线程上执行的方法:Ios 需要特定线程的可靠方法,ios,objective-c,xcode,multithreading,grand-central-dispatch,Ios,Objective C,Xcode,Multithreading,Grand Central Dispatch,给定必须在主线程上执行的方法: -(void)methodRequiringMainThread{ int a=1; } 以及它的调用方: -(void)callerToMethod{ if(![NSThread isMainThread]){ dispatch_sync(dispatch_get_main_queue(), ^{[self methodRequiringMainThread]}); } else
-(void)methodRequiringMainThread{
int a=1;
}
以及它的调用方:
-(void)callerToMethod{
if(![NSThread isMainThread]){
dispatch_sync(dispatch_get_main_queue(), ^{[self methodRequiringMainThread]});
} else {
[self methodRequiringMainThread];
}
}
确保在主线程上调用该方法的最佳实践是什么
UIKit似乎也没有做任何明确的检查或曝光,这在这一点上很奇怪。似乎应该有某种内置的功能,即使它只是XCode的内部功能,用于通信和/或保证线程。如果有一种方法应该始终在主线程上运行,为什么不把它的所有实现放在dispatch_get_mainqueue块中呢?另一种选择是将函数代码作为方法本身的一个块,然后使用策略2中的逻辑来执行该块或将其分派到正确的线程。次要优势:用一种方法而不是两种方法来达到目的。我认为这是@Alexkosiakov的观点,但要重申:选项2很好,但不需要额外的方法。让
methodRequiringMainThread
的第一行执行分派。是的!这实际上是我的第一个响应,但将方法的全部内容包装在块中有点难看。另外,由于它是一个同步,我必须首先进行检查,所以实际上我必须首先分配一个块变量,然后在最后有条件地分派,这有点奇怪。我也不完全确定对参数和返回值的影响,特别是,例如,是否需要削弱已传递的自我(示例中未说明),因此关于此方法的另一个问题是。。。如果UIKit方法必须在主线程上运行,为什么UIKit不这样做?为什么UIKit允许调用方出错?如果有一个方法应该总是在主线程上运行,为什么不把它的所有实现放在dispatch_get_mainqueue块中呢?另一种选择是将函数代码作为方法本身的一个块,然后使用策略2中的逻辑来执行该块或将其分派到正确的线程。次要优势:用一种方法而不是两种方法来达到目的。我认为这是@Alexkosiakov的观点,但要重申:选项2很好,但不需要额外的方法。让methodRequiringMainThread
的第一行执行分派。是的!这实际上是我的第一个响应,但将方法的全部内容包装在块中有点难看。另外,由于它是一个同步,我必须首先进行检查,所以实际上我必须首先分配一个块变量,然后在最后有条件地分派,这有点奇怪。我也不完全确定对参数和返回值的影响,特别是,例如,是否需要削弱已传递的自我(示例中未说明),因此关于此方法的另一个问题是。。。如果UIKit方法必须在主线程上运行,为什么UIKit不这样做?为什么UIKit允许调用者出错?