Cas d'utilisation de " oneway void` en Objective-C?
J'ai trouvé un étrange mot clé de NSObject.h
- (oneway void)release;
J'ai cherché sur le web, et appris qu'il se rapporte à de message asynchrone en passant, qui lui ressemble, avec Erlang du passage de messages.
Il semble que cela peut faire beaucoup de choses intéressantes. Quels sont les bons cas d'utilisation de ce mot-clé?
- Facile à retenir:
oneway void
est l'un de ces beaux accidentelle des métaphores, nous voyons parfois dans le codage, dans ce cas, la mort. "S'il y a quelque chose de l'autre côté, ne nous dites pas."
Vous devez vous connecter pour publier un commentaire.
oneway
est utilisé avec les objets distribués API, qui permet l'utilisation de l'objective-c des objets entre différents threads ou des applications. Il indique au système qu'il ne devrait pas bloquer le thread appelant jusqu'à ce que le retour de la méthode. Sans elle, l'appelant bloc, même si la méthode est le type de retour est void. Évidemment, il n'est jamais utilisé à autre chose qu'à vide, car cela signifierait que la méthode renvoie quelque chose, mais l'appelant n'a pas l'obtenir.Pour en savoir plus sur les objets distribués, voir Cacao Conceptuel DistrObjects.
Il semble également être nécessaire pour éliminer un avertissement avec XCode 4.2 (LLVM). Plus précisément:
donne l'avertissement suivant dans XCode 4.2 (avec LLVM):
L'avertissement peut être éliminé par l'ajout de la oneway modificateur:
C'est dans la mise en œuvre d'un singleton si la libération n'a pas vraiment faire quoi que ce soit.
Cela est nécessaire (au moins pour éliminer l'avertissement) sur iOS ainsi que sur OS X. Le NSObject protocole dans l'iOS docs définit libération (oneway void) même si il n'y a pas d'Objets Distribués dans iOS. Il semble que LLVM capte alors que GCC ne pas.
oneway void
est utilisé dansNSObject
et pas dans votre classe personnalisée. La question est de demander pourquoi ne NSObject utilisationoneway void
?Selon la documentation d'Apple oneway est utilisé uniquement pour les objets distribués (et pas pour le multithreading).
Le oneway modificateur n'est utilisé que si l'objet est à distance. Dans ce cas, la libération d'appel peut renvoyer de manière asynchrone (avant la méthode est à la fin). Dans un réseau, il a un sens, car en attente d'un message de retour peut prendre un certain temps.
La méthode release n'a pas de valeur de retour et donc appeler elle peut être exécutée de manière asynchrone. En revanche, les conserver et les autorelease retourner un code et donc nous devons attendre le retour de message pour être transféré dans tout le réseau.
oneway
mot-clé provoque le message de ne pas bloquer le thread appelant, tandis que la méthode appelée est exécuté, ce qui rend la méthode appelée à être exécuté sur un deuxième thread. N'est-ce pas multitâche (dans sa forme la plus simple)? Puis-je l'utiliser pour détacher une partie du petits opérations rapidement (sans trop d'effort) à un autre thread? Je vous remercie beaucoup.- (oneway void) release
alors? Il n'est pas sur une autre machine ou d'un processus.one way
à une méthodedon't wait for the method to complete and return anything. block it if there is any n/w trafic or so.
Dois-je faire sens?