我正在将 AsyncSocket 类用于聊天应用程序。但我想为整个项目使用在登录页面中创建的 AsyncSocket 实例。这意味着我想重用在登录页面中为 chatViewControl 类创建的 AsyncSocket 实例。谁能帮我找到解决方案?
问问题
609 次
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 回答