J'utilise la classe AsyncSocket pour une application de discussion. Mais je veux utiliser l'instance AsyncSocket créant dans la page de connexion pour l'ensemble du projet. Cela signifie que je veux réutiliser l'instance d'AsyncSocket créée dans la page de connexion de la classe chatViewControl. Quelqu'un peut-il m'aider à trouver une solution pour cela?Comment déclarer une instance AsyncSocket en tant que Global
Répondre
Vous devriez vraiment éviter l'état global lorsque cela est possible (voir le lien de Sven). En général, vous êtes probablement mieux d'avoir une sorte d'objet que vous passez à vos autres objets. Par exemple, l'application actuelle sur laquelle je travaille a un objet ServerInfo que je crée avant de me connecter et de passer à chaque nouveau contrôleur de vue lorsque je le crée, et il contient le socket, les informations de cryptage, l'ID de message actuel , nom d'utilisateur, etc.
Cependant, pour répondre à la question de savoir comment déclarer comme globale, vous pouvez le faire comme dans C:
dans login.h:
extern AsyncSocket *g_socket;
dans login.m:
AsyncSocket *g_socket;
puis lorsque vous créez la prise:
g_socket = [[AsyncSocket alloc] init];
et quand vous voulez l'utiliser dans d'autres fichiers:
#import "login.h"
...
[g_socket sendData:...];
On devrait vraiment éviter l'état global, donc ce n'est pas une bonne idée. Il y a une raison pour laquelle cela n'est pas fait très souvent. – Sven
C'était mon intention, mais je suppose que je ne l'ai pas bien transmise - j'ai réordonné/reformulé ma réponse pour que ce soit plus clair. – JosephH
Si vous souhaitez avoir une référence à l'échelle application à un seul AsyncSocket
, vous pourriez envisager de le déclarer comme une propriété de votre application delegate. Vous pouvez le faire le long des lignes suivantes:
// SampleAppDelegate.h
#import <Foundation/Foundation.h>
@class AsyncSocket;
@interface SampleAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
AsyncSocket *socket;
}
@property (nonatomic,retain) AsyncSocket *socket;
// SampleAppDelegate.m
#import <SampleAppDelegate.h>
#import <AsyncSocket.h>
@implementation SampleAppDelegate
@synthesize socket;
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
[window addSubview:[splitViewController view]];
[window makeKeyAndVisible];
self.socket = [[AsyncSocket alloc] init]; // I can't remember this off the top of my head!
}
A partir de ce point vous pouvez accéder à votre prise en faisant simplement:
AsyncSocket *socket = [UIApplication sharedApplication] delegate] socket];
J'ai essayé votre suggestion en plaçant le socket dans AppDelegate mais lorsque j'ai essayé d'accéder à partir d'autres contrôleurs de vue, l'appel de la méthode de socket ne sort pas -> délégué [UIApplication sharedApplication]]. J'utilise CocoaAsyncSocket: https://github.com/robbiehanson/CocoaAsyncSocket Une idée? – Eddy
- 1. Comment déclarer un pointeur vers une variable en tant que paramètre d'une fonction en C++?
- 2. Déclarer un ENUM en tant que membre de la classe
- 3. Comment puis-je déclarer une variable de classe en tant que virgule flottante dans Moose?
- 4. Instance Tomcat multiple s'exécutant en tant que service
- 5. Est-il possible de déclarer une méthode en tant que paramètre en C#?
- 6. Java - Comment déclarer les éléments table [i] [j] en tant que variables d'instance?
- 7. Objective-C Singleton instance en tant que statique?
- 8. Comment déclarer l'horodatage en tant que variable et le convertir en format ddmmyy
- 9. Comment stocker une instance d'objet en tant que champ d'une entité EJB3?
- 10. AsyncSocket Délai
- 11. Pourquoi ne puis-je pas déclarer une variable d'instance en tant que tableau d'objets dans PHP?
- 12. Créer une instance d'un type, à condition en tant que paramètre à une méthode
- 13. C++/CLI: Comment déclarer un tableau de modèles en tant que paramètres de méthode
- 14. C++: comment déclarer tableau de modèle en tant que paramètre de fonction
- 15. Comment déclarer le type de retour en tant que classe interne du type typename?
- 16. Passer une requête en tant que paramètre
- 17. Le contrôleur peut-il prendre une instance d'interface en tant que paramètre? ASP .NET MVC
- 18. Fournir un point d'accès global à une instance d'un objet
- 19. Pourquoi ne puis-je pas stocker une instance de classe PHP en tant que variable SESSION?
- 20. Comment définir une propriété personnalisée en tant que valeur XAML?
- 21. Comment puis-je transmettre une propriété en tant que délégué?
- 22. SEL en tant que propriété d'instance ou en tant que variable statique
- 23. Comment déclarer une union en C#?
- 24. Comment déclarer une variable globale en JavaScript?
- 25. comment déclarer une variable en javascript
- 26. Comment faire pour définir et déclarer une variable en utilisant le constructeur par défaut en C++?
- 27. Comment déclarer une classe enfant en tant que propriété d'une classe parent à utiliser dans des classes enfants apparentées?
- 28. En C#, Comment déclarer DWORD en uint32?
- 29. AsyncSocket writeData question
- 30. .NET en tant que client, Java en tant que serveur
Vous devriez vraiment éviter état global. Passez simplement l'instance 'AsyncSocket' aux autres objets qui en ont besoin. Lire à propos de l'injection de dépendance: http://en.wikipedia.org/wiki/Dependency_injection – Sven