2013-08-27 113 views
0

我在Objective C中传递参数时遇到问题。这里是我的情况:Objective C:实例变量作为参考

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

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

我想是这样做的:根控制器及其子视图创建3个控制器(滚动型),并告诉他们。它还创建通信对象并将这3个控制器发送给这个对象(由ref)。并且还发送给通信对象的每个控制器实例。在这种情况下,通信对象可以直接向控制器发送数据,控制器也可以直接请求数据。

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

你能告诉我应该怎么解决这个问题?接下来的想法是,根控制器创建3个子控制器和一个通信对象。该通信对象将向根控制器发送消息,并将该消息转发给右侧控制器。子控制器将向根控制器发送消息,并将其转发给通信对象。

+1

你绝对可以**使用指针**效仿引用。在什么意义上“不起作用”? – 2013-08-27 11:26:28

+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”。

0

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