J'ai trouvé un mot-clé étrange dans NSObject.h
- (oneway void)release;
J'ai cherché sur le Web et j'ai appris qu'il était lié au passage de messages asynchrones, ce qui ressemble à celui d'Erlang.
Il semble que cela puisse faire beaucoup de choses intéressantes. Quels sont quelques bons cas d'utilisation de ce mot clé?
oneway void
c'est l'une de ces belles métaphores accidentelles que l'on voit parfois dans le codage, en l'occurrence la mort. "S'il y a quelque chose de l'autre côté, ne nous le dis pas."Réponses:
oneway
est utilisé avec l'API des objets distribués, qui permet l'utilisation d'objets objective-c entre différents threads ou applications. Il indique au système qu'il ne doit pas bloquer le thread appelant tant que la méthode n'est pas retournée. Sans cela, l'appelant bloquera, même si le type de retour de la méthode est void. De toute évidence, il n'est jamais utilisé avec autre chose que void, car cela signifierait que la méthode renvoie quelque chose, mais l'appelant ne l'obtient pas.Pour plus d'informations sur les objets distribués, consultez Cocoa Conceptual DistrObjects .
la source
Selon la documentation d'Apple, oneway n'est utilisé que pour les objets distribués (et non pour le multithreading).
Le modificateur oneeway n'est utilisé que si l'objet est distant. Dans ce cas, l'appel de libération peut être renvoyé de manière asynchrone (avant que la méthode ne se termine). Dans un réseau, cela a du sens car l'attente d'un message de retour peut prendre un certain temps.
La méthode release n'a pas de valeur de retour et donc l'appel peut être exécutée de manière asynchrone. En revanche, conserver et relâcher automatiquement renvoyer un identifiant et nous devons donc attendre que le message de retour soit transféré sur tout le réseau.
la source
oneway
mot - clé empêche le message de bloquer le thread appelant pendant que la méthode appelée est exécutée, cela rend la méthode appelée exécutée sur un deuxième thread. N'est-ce pas le multitâche (dans sa forme la plus simple)? Puis-je l'utiliser pour détacher rapidement certaines petites opérations (sans trop d'effort) à un autre thread? Merci beaucoup.- (oneway void) release
alors? Ce n'est pas sur une autre machine ou processus.one way
une méthode signifiedon't wait for the method to complete and return anything. block it if there is any n/w trafic or so.
Dois-je avoir un sens?