Encontrei uma palavra-chave estranha em NSObject.h
- (oneway void)release;
Eu pesquisei na web e descobri que ela está relacionada à passagem de mensagem assíncrona, que é semelhante à passagem de mensagem de Erlang.
Parece que isso pode tornar muitas coisas interessantes. Quais são alguns bons casos de uso dessa palavra-chave?
objective-c
syntax
keyword
use-case
eonil
fonte
fonte
oneway void
é uma daquelas belas metáforas acidentais que às vezes vemos na codificação, neste caso, a morte. "Se houver alguma coisa do outro lado, não nos diga."Respostas:
oneway
é usado com a API de objetos distribuídos, que permite o uso de objetos objetivo-c entre diferentes threads ou aplicativos. Ele diz ao sistema que não deve bloquear o thread de chamada até que o método retorne. Sem ele, o chamador irá bloquear, mesmo que o tipo de retorno do método seja nulo. Obviamente, ele nunca é usado com nada além de void, pois isso significaria que o método retornaria algo, mas o chamador não entende.Para obter mais informações sobre objetos distribuídos, consulte Cocoa Conceptual DistrObjects .
fonte
De acordo com a documentação da Apple, oneway é usado apenas para objetos distribuídos (e não para multithreading).
O modificador oneway só é usado se o objeto for remoto. Nesse caso, a chamada de liberação pode retornar de forma assíncrona (antes que o método seja encerrado). Em uma rede, faz sentido porque a espera por uma mensagem de retorno pode demorar um pouco.
O método de liberação não tem valor de retorno e, portanto, a chamada pode ser executada de forma assíncrona. Em contraste, reter e autorelease retornam um id e, portanto, temos que esperar a mensagem de retorno ser transferida por toda a rede.
fonte
oneway
palavra - chave faz com que a mensagem não bloqueie o thread de chamada enquanto o método chamado é executado, isso faz com que o método chamado seja executado em um segundo thread. Isso não é multitarefa (em sua forma mais simples)? Posso usar isso para desanexar algumas pequenas operações rapidamente (sem muito esforço) para outro segmento? Muito obrigado.- (oneway void) release
então? Não está em outra máquina ou processo.one way
um método significa quedon't wait for the method to complete and return anything. block it if there is any n/w trafic or so.
eu faço sentido?