으로 인스턴스 변수는 내 상황입니다. 뷰 내부에는 ScrollView가 있으며 3 개의 뷰 (다음 3 개의 컨트롤러)를 포함합니다. ScrollView 내부의 이러한 3 가지보기가 변경되어 가로로 스크롤 할 수 있습니다. 다음으로는 하드웨어와 통신하는 하나의 객체가 있습니다. 세션과 입출력 스트림이 있습니다. 이 개체는 일부 데이터를 수신하므로이 데이터를보기에 표시해야합니다 (루트보기와 스크롤보기의 3보기). 또한 루트 컨트롤러와이 3 개의 컨트롤러는 때로는 일부 데이터를 요구합니다.목적 C : 나는 루트 컨트롤러 (메인 화면)가</p> <p>: 나는 여기에 목표 C에서 인수 전달에 문제가 참조
통신 객체가 모든 컨트롤러의 인스턴스를 직접 가지고 데이터를 보내야한다는 의미입니다. 그러나 컨트롤러는 데이터를 요청할 수있는 통신 객체의 인스턴스를 가져야합니다.
루트 컨트롤러는 (스크롤보기에서) 하위보기에 대해 3 개의 컨트롤러를 만들고 표시합니다. 또한 통신 객체를 생성하고이 객체에이 세 컨트롤러를 (ref로) 보냅니다. 또한 통신 객체의 각 컨트롤러 인스턴스로 전송합니다. 이 경우 통신 개체는 컨트롤러에 직접 데이터를 보낼 수 있으며 컨트롤러는 데이터도 직접 요청할 수 있습니다.
일반적으로 C#을 사용하므로 인수를 ref로 전달하는 것이 문제가되지 않지만 목표 C에서는 불가능합니다. 내가 참조를 보내고 싶을 때 복사물을 만들어 보내서 객체의 사본이 2 개가있어서 그것을 원하지 않습니다. 하나의 객체에 대한 참조가 필요합니다. 포인터를 보내려고했는데 - (UIViewController **)controller
하지만 잘 작동하지 않는 것 같습니다.
어떻게 해결할 수 있습니까? 다음 개념은 루트 컨트롤러가 3 개의 하위 컨트롤러와 하나의 통신 개체를 생성한다는 것입니다. 이 통신 개체는 루트 컨트롤러에 메시지를 보내고이 메시지를 오른쪽 컨트롤러로 전달합니다. 하위 컨트롤러는 루트 컨트롤러에 메시지를 보내고이를 통신 개체로 전달합니다.
확실히 ** ** 포인터를 사용하여 참조를 에뮬레이트 할 수 있습니다. 어떤 의미에서 "효과가 없습니까?" –
원하지 않는 복사본이 생성되는 코드를 보여줍니다. 자신이하는 일을 알고 있다고 가정 할 때 포인터로 작업하는 데는 아무런 문제가 없어야합니다. 객체에 대한 참조는 기본적으로 포인터입니다. 그러나 위임 패턴을 익히고 적용하는 것이 좋습니다. –