0

チャット アプリケーションに AsyncSocket クラスを使用しています。しかし、プロジェクト全体のログインページで作成する AsyncSocket インスタンスを使用したいと考えています。つまり、chatViewControl クラスのログイン ページで作成された AsyncSocket のインスタンスを再利用したいということです。これに対する解決策を見つけるのを手伝ってくれる人はいますか?

4

2 に答える 2

2

単一の へのアプリケーション全体の参照が必要な場合は、それをアプリケーションの delegateAsyncSocketのプロパティとして宣言することを検討できます。次の行に沿って実行できます。

// 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オブジェクトがあり、作成時に新しいView Controllerに渡します。このオブジェクトには、ソケット、暗号化情報、現在のメッセージ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 に答える