首先,我正在为iPhone编写代码. 我需要能够在不使用performSelectorOnMainThread的情况下调用主线程上的方法. 我不想使用performSelectorOnMainThread的原因是,当我试图为单元测试创建模拟时,它会导致问题.

[self performSelectorOnMainThread:@Selector(doSomething) withObject:nil];

问题是,我的mock知道如何调用doSomething,但它不知道如何调用performSelectorOnMainThread.

有什么解决办法吗?

推荐答案

Objective-C

dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething];
});

Swift

DispatchQueue.main.async {
    self.doSomething()
}

Legacy Swift

dispatch_async(dispatch_get_main_queue()) {
    self.doSomething()
}

Ios相关问答推荐

在SwiftUI中为圆角矩形创建均匀分布的点轮廓

Xamarin Forms CustomPin iOS Render

为什么EKEventStore().questFullAccessToEvents()可以与模拟器一起使用,而不能与真实设备一起使用?

如何使用Swift以编程方式更改SVG文件中某些元素的 colored颜色

ITMS-90432:将应用上传到应用store 时出现问题

在 Swift 中使用 UITesting 捕获屏幕录像

一个 SwiftUI 视图中的多个垂直滚动视图

带有属性包装器的不可用属性

SwiftUI:如何用拇指移动滑块值

在 Swift 中为 UITextField/UIView 摇动动画

在 Grand Central Dispatch 中使用 dispatch_sync

是否可以在 iOS 9 上让您的 iPad 应用退出多任务处理?

标题为 UIImage 的导航栏

从 NSUserDefaults 字典 iOS 中删除所有键

从 WKWebView 获取所有 cookie

如何将自己项目中的类导入 Playground

如果已安装,则重定向到应用程序,否则重定向到 App Store

UITableView:从空白部分隐藏标题

以编程方式确定 iPhone 是否越狱

Twitter api 文本字段值被截断