0

我正在将 AsyncSocket 类用于聊天应用程序。但我想为整个项目使用在登录页面中创建的 AsyncSocket 实例。这意味着我想重用在登录页面中为 chatViewControl 类创建的 AsyncSocket 实例。谁能帮我找到解决方案?

4

2 回答 2

2

如果您希望在应用程序范围内引用单个AsyncSocket,可以考虑将其声明为应用程序委托的属性。您可以按照以下方式进行操作:

// 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];
于 2010-10-11T03:50:09.603 回答
-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:...];
于 2010-09-21T12:07:14.243 回答