Xav*_*hay 2 macos objective-c grand-central-dispatch automatic-ref-counting
我正在尝试更新XCode 6.1/Yosemite的一些代码.它有点奇怪,因为它是一个宏,但基本上它看起来像:
dispatch_block_t blk = ^{ [[self globalEventsHandler] someMethod self]; };
if([NSThread isMainThread]) blk();
else dispatch_async(dispatch_get_main_queue(), blk);
Run Code Online (Sandbox Code Playgroud)
这导致编译问题.我已经在我的预处理器设置中设置了OS_OBJECT_USE_OBJC=0每个GCD指南,因为现在我对代码的现代化不感兴趣.
首先是Implicit conversion of block pointer type 'void (^)(void)' to C pointer type 'dispatch_block_t' (aka 'void *') requires a bridged cast.我可以接受建议修复此问题并获得:
dispatch_block_t blk = (__bridge dispatch_block_t)^{ [[self globalEventsHandler] someMethod self]; };
if([NSThread isMainThread]) blk();
else dispatch_async(dispatch_get_main_queue(), blk);
Run Code Online (Sandbox Code Playgroud)
但现在我收到一个新错误:Called object type 'dispatch_block_t' (aka 'void *') is not a function or function pointer.在那我就被困住了.
问题:
dispatch_block_t直接打电话吗?我在一些较旧的博客文章中找到了原始代码模式,因此我怀疑它是(常见的).__bridge是正确的方法吗?似乎还有其他dispatch_retain与朋友相关的选项可能是合适的.奖励积分:如何在不停用的情况下实现这一目标OS_OBJECT_USE_OBJC?
Xcode 6.1与OS X SDK 10.10的代码片段完全没问题.但是,这些编译错误消息是奇怪的.
Implicit conversion of block pointer type 'void (^)(void)' to C pointer type 'dispatch_block_t' (aka 'void *') requires a bridged cast
Called object type 'dispatch_block_t' (aka 'void *') is not a function or function pointer.
Run Code Online (Sandbox Code Playgroud)
dispatch_block_t应该是以下内容dispatch/object.h.
typedef void (^dispatch_block_t)(void);
Run Code Online (Sandbox Code Playgroud)
但是这些错误消息说的dispatch_block_t是相同的void *.你输入了dispatch_block_t自己而不是包含Foundation/Foundation.h或者dispatch/dispatch.h?您最好dispatch_block_t在代码中搜索typedef.
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |