Objective-C中“单向无效”的用例?

Objective-C中“单向无效”的用例?,objective-c,syntax,keyword,use-case,Objective C,Syntax,Keyword,Use Case,我在NSObject.h中发现了一个奇怪的关键字 - (oneway void)release; 我搜索了web,了解到它与异步消息传递有关,这与Erlang的消息传递类似 看来这可以做很多有趣的事情。这个关键字有哪些好的用例?单向与分布式对象API一起使用,它允许在不同线程或应用程序之间使用objective-c对象。它告诉系统在方法返回之前不应该阻塞调用线程。如果没有它,调用方将阻塞,即使该方法的返回类型为void。显然,除了void之外,它从不与其他任何东西一起使用,因为这样做意味着该方

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

- (oneway void)release;
我搜索了web,了解到它与异步消息传递有关,这与Erlang的消息传递类似


看来这可以做很多有趣的事情。这个关键字有哪些好的用例?

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


有关分布式对象的更多信息,请参见。

根据苹果的文档,oneway仅用于分布式对象(而不用于多线程)

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


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

我有一个相关的问题:如果使用
单向
关键字导致消息在被调用方法执行时不阻塞调用线程,这使得被调用的方法在第二个线程上执行。这不是多任务(以最简单的形式)吗?我可以用它将一些小操作快速地(不费吹灰之力)分离到另一个线程吗?非常感谢。不,你不能。在分布式计算中,线程在不同的机器/进程中执行。您可以使用performSelector:onThread:withObject:waitUntilDone:作为您的用途。那么
-(单向无效)释放会发生什么情况呢?它不在另一台机器或进程上。+1用于解释确切的一种方法是什么-->精确地定义方法的
one-way
,意味着
不要等待方法完成并返回任何内容。如果存在n/w trafic或其他情况,请阻止该链接。
我说得通吗?该链接似乎不再起作用。我在苹果的文档中找不到它,但我发现:这为“单向”关键字提供了一个很好的解释。见第4.4.5节(pdf第24页)@Robin感谢更新。在过去的几个月里,它已经消失了,但我找不到苹果的另一个参考资料,所以我就离开了它。我认为启动网络任务的唯一方法是使用gcd_async及其朋友对它们进行分线程。很容易记住:
onewayvoid
是我们在编码中有时会看到的美丽的意外隐喻之一,在这种情况下,死亡。“如果那边有什么事,别告诉我们。”