我在使用内置的Xcode单元测试框架SenTestingKit测试一些宏的中央调度代码时遇到了一些麻烦.我成功地解决了我的问题.我有一个单元测试,它构建一个块并尝试在主线程上执行它.但是,该块永远不会被实际执行,因此测试会挂起,因为它是同步调度.
- (void)testSample {
dispatch_sync(dispatch_get_main_queue(), ^(void) {
NSLog(@"on main thread!");
});
STFail(@"FAIL!");
}
Run Code Online (Sandbox Code Playgroud)
什么是导致它挂起的测试环境?
关于这个问题,我想知道是否有任何普遍接受的逻辑关于何时使用NSNotification,在主线程中使用观察者,使用GCD将工作从后台线程调度到主线程?
似乎通过通知 - 观察者设置,您必须记住在视图卸载时拆除观察者,然后您可靠地忽略通知,其中将作业分派给主线程可能导致在视图具有块时执行已卸下.
因此,在我看来,通知应该提供改进的应用程序稳定性.我假设调度选项提供了比我读过的GCD更好的性能?
更新:
我知道通知和发送可以一起愉快地工作,在某些情况下,应该一起使用.我试图找出是否存在应该/不应该使用的具体情况.
一个示例案例:为什么我会选择主线程来从调度块发出通知而不是仅仅调度主队列上的接收函数?(显然在这两种情况下接收功能会有一些变化,但最终结果似乎是相同的).
我想获得iOS应用程序中"活着"的线程数.
我可以threadDictionary
在NSThread
课堂上使用吗?或者我可以使用mach/thread_info.h
?