【问题标题】:Objective C: instance variable as reference目标 C:实例变量作为参考
【发布时间】:2013-08-27 11:14:50
【问题描述】:

我在 Objective C 中传递参数时遇到问题。这是我的情况:

我有一个根控制器(主屏幕)。在其视图内部有一个 ScrollView,它包含 3 个视图(接下来的 3 个控制器)。您可以水平滚动它,并且 ScrollView 中的这 3 个视图正在发生变化。接下来我有一个与某些硬件通信的对象。有一个会话和输入/输出流。该对象接收一些数据,我需要在视图中显示这些数据(根视图和滚动视图中的 3 个视图)。根控制器和这 3 个控制器有时也会要求一些数据。

这意味着通信对象必须具有所有控制器的实例才能直接向它们发送数据。但是控制器必须有通信对象的实例才能请求数据。

我想这样做:根控制器为其子视图(在滚动视图中)创建 3 个控制器并显示它们。它还创建通信对象并将这 3 个控制器(通过 ref)发送到该对象。并且还发送到通信对象的每个控制器实例。在这种情况下,通信对象可以直接向控制器发送数据,控制器也可以直接请求数据。

通常我使用 C#,所以通过 ref 传递参数不是问题,但在 Objective C 中似乎是不可能的。当我想发送引用时,它会创建一个副本并发送它,所以我有两个对象副本,我不想要它。我想引用一个对象。我试图发送一个指针 - (UIViewController **)controller 但它似乎也不起作用。

你能告诉我应该如何解决这个问题吗?下一个想法是根控制器创建 3 个子控制器和一个通信对象。此通信对象将向根控制器发送消息,并将此消息转发给正确的控制器。子控制器将消息发送到根控制器,然后将其转发给通信对象。

【问题讨论】:

  • 您绝对可以使用指针模拟引用。在什么意义上“它不起作用”?
  • 显示一些创建不需要的副本的代码。假设您知道自己在做什么,那么使用指针应该没有问题。无论如何,对对象的引用基本上是一个指针。但是,我强烈建议您熟悉委托模式并应用它。

标签: ios objective-c pointers reference instance-variables


【解决方案1】:

如果你没有明确地复制对象,那么在 Objective-C 中是通过引用传递的:

void addWorld(NSMutableString *stringReference) {
    [stringReference appendString:@"world!"];
}

通过引用传递:

NSMutableString *greeting = [NSMutableString stringWithString:@"Hello, "];
addWorld(greeting);
NSLog(@"%@", greeting);

另见答案“How to pass values by reference in objective C”。

【讨论】:

    【解决方案2】:

    我是白痴。当我发送参考时,它是零。问题解决了,Objective C 通过 ref 传递对象。但是我仍然想知道通信对象直接访问控制器和控制器直接访问通信对象是否是正确的解决方案?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2011-09-15
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多