在Objective-C中使用`oneway void`的用例?

Eon*_*nil 105 syntax objective-c use-case keyword

我在NSObject.h中找到了一个奇怪的关键字

- (oneway void)release;
Run Code Online (Sandbox Code Playgroud)

我搜索了网络,并了解到它与异步消息传递有关,它与Erlang的消息传递类似.

看来这可以做很多有趣的事情.这个关键字的一些好用例是什么?

ugh*_*fhw 108

oneway与分布式对象API一起使用,允许在不同的线程或应用程序之间使用objective-c对象.它告诉系统在方法返回之前它不应该阻塞调用线程.没有它,调用者将阻塞,即使方法的返回类型为void.显然,它永远不会与void之外的任何东西一起使用,因为这样做意味着该方法返回一些东西,但是调用者没有得到它.

有关分布式对象的更多信息,请参阅Cocoa Conceptual DistrObjects.

  • 该链接似乎不再起作用.我在Apple的文档中找不到它,但我找到了:http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf,它提供了对"oneway"关键字的一个很好的解释.见4.4.5节(pdf第24页) (6认同)

Fre*_*man 18

根据Apple的文档,单向仅用于分布式对象(而不是用于多线程).

单向修改器仅在对象是远程时使用.在这种情况下,释放调用可以异步返回(在方法终止之前).在网络中它是有道理的,因为等待返回消息可能需要一段时间.

release方法没有返回值,所以调用它可以异步执行.相反,retain和autorelease返回一个id,因此我们必须等待返回消息在整个网络中传输.

  • 不,你不能。在分布式计算中,线程在不同的机器/进程中执行。您可以使用 PerformSelector: onThread: withObject: waitUntilDone: 来达到您的目的。 (2认同)
  • 那么`-(oneway void)release`会发生什么呢?它不在另一台机器或进程上。 (2认同)