Jay*_*ais 5 objective-c grand-central-dispatch ios objective-c-blocks
通过以下方式查看iOS开发建议并不罕见:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// work in background
NSLog(@"%s work", __PRETTY_FUNCTION__);
dispatch_async(dispatch_get_main_queue(), ^{
// update UI on main queue
NSLog(@"%s updateUI", __PRETTY_FUNCTION__);
});
});
Run Code Online (Sandbox Code Playgroud)
这很好,但是当出现问题时调试很难.看输出:
AppName[1051:4013] __47-[Classname methodName]_block_invoke_0 work
AppName[1051:907] __block_global_0 updateUI
Run Code Online (Sandbox Code Playgroud)
第一个日志行有类和方法名称,所以我们有一些希望跟踪外部块中的问题(希望我们没有在该方法中定义多个块),但是第二个日志行(来自内部块) ?祝你好运,特别是如果你在你的应用程序中经常使用这种模式.
有没有办法给出块名称,这将有助于我们在控制台输出和崩溃日志中识别它们的源位置?
您可以做的一件事是使用函数而不是块,而dispatch_async_f不是dispatch_async. 不过,权衡是很重要的,因为您失去了块的内联代码性质,以及无需通过上下文指针封送状态即可捕获状态的能力。
您也可以只在外部块外部声明内部块并将其存储在局部变量中。有点不太简洁,但它会像外部块一样用封闭方法的名称来标记它。
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |