0

在阅读了一堆 stackoverflow 帖子和论坛后,我对这个主题感到非常困惑。很多人谈论使用委托,但如果有大量数据,可能会导致内存问题。

我只处理来自 TCP/IP 设备的大约 600 字节的数据,并用新的值覆盖现有值。

我制作了一个RootViewController具有特殊视图和 TCP/IP 套接字的视图,此外,我还有两个必须使用来自RootViewController(TCP/IP) 的数据的视图控制器。

我是否应该为 TCP 内容创建一个单独的类,而不是在我的 RootViewController 中混合它?

另外我应该如何处理跨 ViewControllers 的数据共享?

提前致谢。

4

2 回答 2

2

如果您对 TCP 的“东西”做了很多工作(例如获取数据、显示数据、重新格式化数据、比较或更改数据然后重新保存等),那么我建议创建一个单独的类(可能是 NSObject ) 具有处理 TCP 内容的所有方法,然后在根视图控制器中创建该对象的实例。

至于在其他视图控制器中获取数据,您必须在其他视图控制器中创建对根视图控制器的引用,然后在界面构建器中(或以编程方式)连接它们。只要确保你没有创建一个全新的根视图控制器实例(即不要使用 [[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 回答