2009-06-17 3 views
2

내가 내가 URLView Controller ivar를 설정하는 가장 좋은 장소는 무엇입니까?

- (id)initWithURL:(NSURL *)url 

이 클래스는 이제 변수 인스턴스

// in the interface 
ViewController *viewController; 
// in the implementation 
[viewController addObject:theObject]; 

를 사용하여 호출하는 클래스의 배열에 객체를 추가로 초기화 XML 리더 클래스가, 내 XML 판독기를 초기화 클래스, 다음 개별적으로보기 컨트롤러를 설정합니다

XMLController *xmlController = [[XMLController alloc] 
        initWithURL:url]; 
xmlController.viewController = self; 

내 질문에 내가 viewCon을 설정하는 새로운 초기화 함수를 작성해야하는지 여부입니다 유모차를 동시에. 감사합니다. .

편집 : 내 XML 리더가 init 함수에서 클래스를 다운로드하고 구문 분석하기 시작하는 것을 추가하는 것을 잊어 버렸습니다.

답변

2

init 루틴이 대리자/컨트롤러 호출을 발생 시키거나 대리자에게 메시지를 보낼 수있는 비동기 활동 (잠재적으로 다운로드 포함)을 설정하면 init 함수에 포함시켜야합니다.

그렇지 않으면 컨트롤러가 initWithURL 루틴이 반환되기 전에 호출 될 수있는 xmlController : didStartConnection과 같은 잠재적 위임 메시지를 놓칠 수 있습니다.

컨트롤러/위임자가 XMLController 활동의 필수 부분 인 경우 init 루틴에 포함시켜야합니다.

는 그래서 그래,이 경우 내가 제안 :

XMLController *xmlController = [[XMLController alloc] initWithURL:url andController:self]; 
4

전적으로 귀하에게 달려 있습니다. Apple의 모든 코드에서 두 스타일의 예를 볼 수 있습니다.

시간이 지남에 따라 viewController 속성의 값이 상수라는 가정을하지 않는 한 그대로 두는 것이 좋습니다.

그런데 특정 서브 클래스를 요구하지 않고 addObject : 논리를 프로토콜로 리팩토링하는 방법을 생각해보십시오. 다음과 같음 :

-xmlController:didDecodeObject: 

또는 XMLController 객체의 논리에 맞는 것이 무엇이든간에.

관련 문제