我正在使用AsyncSocket类进行聊天应用程序。但是我想在整个项目的Login页面中使用AsyncSocket实例。这意味着我想重用在chatViewControl类的Login页面中创建的AsyncSocket实例。 任何人都可以帮我找到解决方案吗?
答案 0 :(得分:2)
如果您希望对单个AsyncSocket
进行应用程序范围的引用,可以考虑将其声明为application delegate的属性。您可以按以下方式执行此操作:
// 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!
}
从这一点开始,您只需执行以下操作即可访问您的套接字:
AsyncSocket *socket = [UIApplication sharedApplication] delegate] socket];
答案 1 :(得分:-1)
你应该尽可能避免全局状态(参见Sven的链接)。一般来说,你可能更好地拥有一些你传递给其他物体的物体。
例如,我正在处理的当前应用程序我有一个ServerInfo对象,我在登录之前创建并在创建它时传递给每个新的视图控制器,它包含套接字,加密信息,当前消息ID,用户名等
但是,要回答如何将其声明为全局的问题,您可以像在C中一样进行:
在login.h中:
extern AsyncSocket *g_socket;
在login.m中:
AsyncSocket *g_socket;
然后在创建套接字时:
g_socket = [[AsyncSocket alloc] init];
当你想在其他文件中使用它时:
#import "login.h"
...
[g_socket sendData:...];