0

たくさんのstackoverflowの投稿やフォーラムを読んだ後、私はこのテーマについて本当に混乱しました。デリゲートの使用については多くの人が話しますが、大量のデータがある場合はメモリの問題が発生する可能性があります。

TCP / IPデバイスからの約600バイトのデータを処理し、既存の値を新しい値で上書きするだけです。

特別なビューとTCP/IPソケットを持つを作成しました。さらに、 (TCP / IP)RootViewControllerからのデータを使用する必要がある他の2つのViewControllerがあります。RootViewController

RootViewControllerで混同するのではなく、TCP用に別のクラスを作成する必要がありますか?

また、ViewController間でのデータの共有をどのように処理する必要がありますか?

前もって感謝します。

4

2 に答える 2

2

TCPの「もの」で多くのことをしている場合(たとえば、データの取得、データの表示、データの再フォーマット、データの比較または変更、そして再保存など)、別のクラス(おそらくNSObject)を作成することをお勧めします)TCPのものを処理し、ルートビューコントローラでそのオブジェクトのインスタンスを作成するためのすべての方法があります。

他のViewControllerでデータを取得する場合は、他のView ControllerでルートViewControllerへの参照を作成してから、Interface Builderで(またはプログラムで)接続する必要があります。ルートビューコントローラーの新しいインスタンスを作成しないように注意してください(つまり、[[RootViewController alloc] init];を使用しないでください)。

それは理にかなっていますか?アプリの構造についてもっと投稿する場合(ナビゲーションコントローラーを使用している場合など)、私はあなたにもっと具体的になる可能性があります。

幸運を!

于 2012-05-08T19:48:41.437 に答える
1

クラス間でデータを共有するには、通知メカニズムを使用できます。FromClass.mに通知を投稿します。

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:yourTCPData, @"TCPData", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotTCPData" object:nil userInfo:options];

ToClass.m viewDidLoadに次を追加します:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeSomeThingUsefulWithTCPData:)name:@"gotTCPData" object:nil];

...そしてToClass.mのどこかにこのメソッドを追加します:

- (void)makeSomeThingUsefulWithTCPData:(NSNotification *)notification {
  NSDictionary *dict = [notification userInfo];
  yourTCPDataClass *yourTCPDataObject = [dict objectForKey:@"TCPData"];
  // Here make something useful with your TCP data
  }

また、これをToClass.m viewDidUnloadに追加して、ビューがアンロードされるときにオブザーバーオブジェクトを解放します。

[[NSNotificationCenter defaultCenter] removeObserver:self];
于 2012-05-09T04:01:48.463 に答える