如何将AsyncSocket实例声明为Global

时间:2010-09-21 11:38:59

标签: iphone objective-c asyncsocket

我正在使用AsyncSocket类进行聊天应用程序。但是我想在整个项目的Login页面中使用AsyncSocket实例。这意味着我想重用在chatViewControl类的Login页面中创建的AsyncSocket实例。 任何人都可以帮我找到解决方案吗?

2 个答案:

答案 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:...];