目标C中“单向空隙”的用法-C?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我在NSObject.h中发现了一个奇怪的关键字

- (oneway void)release;

我搜索了网页,发现它与异步消息传递有关,这与Erlang的消息传递看起来很相似。

看来这可以做出许多有趣的事情。这个关键字有什么好的用例?

提问于
用户回答回答于

oneway与分布式对象API一起使用,它允许在不同线程或应用程序之间使用objective-c对象。它告诉系统在方法返回之前不应该阻塞调用线程。没有它,即使方法的返回类型是无效的,调用者也会阻塞。显然,它不会用于除void以外的其他任何内容,因为这样做会意味着该方法返回某些内容,但调用者不会获得它。

用户回答回答于

它似乎也有必要用XCode 4.2(LLVM)消除警告。特别:

-(void) release { }

在XCode 4.2(使用LLVM)中给出以下警告:

警告:语义问题:在'release'的实现中,在返回类型上发生冲突的分布式对象修饰符

警告可以通过添加单向修改器来消除:

-(oneway void) release { }

这在iOS和OS X中是必需的(至少消除警告)。iOS文档中的NSObject协议将版本定义为(oneway void),即使iOS中没有分布式对象也是如此。看起来LLVM认为这一点,而GCC则没有。

扫码关注云+社区