跨ViewControllers共享数据

时间:2012-05-08 19:30:19

标签: objective-c ios uiviewcontroller

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

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

我创建了一个RootViewController,它有一个特殊的视图和TCP / IP套接字,而且还有另外两个ViewControllers,它们必须使用来自RootViewController(TCP / IP)的数据。

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

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

至于在其他视图控制器中获取数据,您必须在其他视图控制器中创建对根视图控制器的引用,然后在界面构建器中(或以编程方式)连接它们。只是确保你没有创建一个全新的根视图控制器实例(即不要使用[[RootViewController alloc] init];)

这有意义吗?如果你发布更多关于你的应用程序的结构(就像你使用导航控制器等),我可能会更具体的你。

祝你好运!

答案 1 :(得分: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];