2013-08-27 138 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傳遞對象。但是我仍然想知道,通信對象直接訪問控制器和直接訪問控制器到通信對象是否正確?