Objective c 跨视图控制器共享数据

Objective c 跨视图控制器共享数据,objective-c,ios,uiviewcontroller,Objective C,Ios,Uiviewcontroller,在读了一大堆stackoverflow的帖子和论坛后,我对这个话题感到非常困惑。很多人都在谈论使用委托,但如果有大量数据,可能会导致内存问题 我只需要处理来自TCP/IP设备的大约600字节的数据,并用新的 我制作了一个RootViewController,它有一个特殊的视图和TCP/IP套接字,另外还有两个viewcontroller,它必须使用RootViewController(TCP/IP)中的数据 我是否应该为TCP内容创建一个单独的类,而不是在我的RootViewController

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

我只需要处理来自TCP/IP设备的大约600字节的数据,并用新的

我制作了一个
RootViewController
,它有一个特殊的视图和TCP/IP套接字,另外还有两个viewcontroller,它必须使用
RootViewController
(TCP/IP)中的数据

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

我还应该如何处理ViewController之间的数据共享


提前感谢。

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

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

这有意义吗?如果你发布更多关于你的应用程序结构的信息(比如你使用的是导航控制器等),我可以为你提供更具体的信息


祝你好运

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

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

这有意义吗?如果你发布更多关于你的应用程序结构的信息(比如你使用的是导航控制器等),我可以为你提供更具体的信息


祝你好运

要在类之间共享数据,可以使用通知机制。在您的FromClass.m中发布通知:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:yourTCPData, @"TCPData", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotTCPData" object:nil userInfo:options];
ToClass.m视图中添加以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeSomeThingUsefulWithTCPData:)name:@"gotTCPData" object:nil];
…并在到class.m的某个地方添加以下方法:

- (void)makeSomeThingUsefulWithTCPData:(NSNotification *)notification {
  NSDictionary *dict = [notification userInfo];
  yourTCPDataClass *yourTCPDataObject = [dict objectForKey:@"TCPData"];
  // Here make something useful with your TCP data
  }
ToClass.mviewDidUnload中添加此选项,以便在卸载视图时释放观察者对象:

[[NSNotificationCenter defaultCenter] removeObserver:self];

要在类之间共享数据,可以使用通知机制。在您的FromClass.m中发布通知:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:yourTCPData, @"TCPData", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotTCPData" object:nil userInfo:options];
ToClass.m视图中添加以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeSomeThingUsefulWithTCPData:)name:@"gotTCPData" object:nil];
…并在到class.m的某个地方添加以下方法:

- (void)makeSomeThingUsefulWithTCPData:(NSNotification *)notification {
  NSDictionary *dict = [notification userInfo];
  yourTCPDataClass *yourTCPDataObject = [dict objectForKey:@"TCPData"];
  // Here make something useful with your TCP data
  }
ToClass.mviewDidUnload中添加此选项,以便在卸载视图时释放观察者对象:

[[NSNotificationCenter defaultCenter] removeObserver:self];

数据在哪里?我将尝试实现这一点。您的数据在您的tcpdata对象中。在任何需要将数据发送到另一个对象的地方发布来自第一个代码段的通知。因此,
object:nil
应设置为真实对象?userInfo:options应设置为真实对象。您能否给出一个完整的对象数据示例?涉及的数据在哪里?我将尝试实现这一点。您的数据在您的tcpdata对象中。在任何需要将数据发送到另一个对象的地方发布来自第一个代码段的通知。因此,
object:nil
应该设置为真实对象?userInfo:options应该设置为真实对象。您能给出一个对象数据的完整示例吗?如果有任何区别,我使用tabbar。我已经为我的TCP控制器实现了这个类,它在单例中运行得很好。如果有什么不同,我就使用tabbar。我已经为我的TCP控制器实现了这个类,它可以很好地处理单例。