Objective C:实例变量作为参考

时间:2013-08-27 11:14:51

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

如果不明确复制对象,则在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”。

答案 1 :(得分:0)

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