2010-08-10 4 views
0

iTuneU 스탠포드 아이폰 코스 HelloPoly 드로잉 지정 작업을하고 있는데, 예상하지 못했을 때 내 오브젝트의 init 루틴을 호출하고 있습니다. 콜백은 호출이 _loadMainNibFile에서 오는 것임을 나타냅니다 (다른 호출 이후). 내가 이해하려고하는 것은 내 객체가 암묵적으로 초기화되어있는 이유입니다. 소스 파일은 다음에서 찾을 수 있습니다. - http://www.cavedrawings.com/hp2_files.zip초기화가 호출되고 있는데 이유를 모르겠습니다.

누구나 NIB 파일을로드 할 때 암시 적으로 init 루틴이 호출 될 수 있습니다.

답변

1

initWithCoder:의 대부분의 구현은 궁극적으로 다른 초기화 함수를 호출합니다. 점진적으로 초기화 프로세스에 정보를 추가하는 일련의 초기화 메소드가있을 때 초기화 메소드를 스택하는 것이 일반적입니다.

_loadMainNibFile은 마지막으로 init까지 이어지는 또 다른 초기화 메소드를 호출하는 nib 파일 소유자의 initWithCoder:을 호출합니다.

+0

예, initWithCoder에서 호출 중입니다. nib 파일에는 객체에 대한 IBOutlet 만 있고 정의 자체에는 포함되어서는 안됩니다 ... – Arana

+0

NIB로드 프로세스를 이해할 수 없다고 생각합니다. 펜촉은 마른 물건을 얼려서 얼려 붙습니다. nib에서 객체를로드하면 객체 클래스의 초기화 메소드를 호출하여 동결 된 객체의 복제 된 새 인스턴스를 만듭니다. 펜촉에 정의 된 모든 클래스의 지정된 이니셜 라이저는 펜촉이로드 될 때 호출됩니다. – TechZen

+0

분명히! 그래서 당신이 말하는 것을 얻는다면 ... 펜촉에서 참조되는 모든 객체는 펜촉이로드 될 때 init'ed가됩니다. 그러면 객체를 초기화 할 때까지 뷰에 아웃렛을 포함 할 수 있습니까? ? 이 모든 것이 어떻게 작동하는지 애플의 문서에 언급이 있습니까? – Arana

1

펜촉이로드되면 그 안에있는 모든 객체가 인스턴스화되어 필요한 모든 준비 작업을 수행합니다.

펜촉의 개체를로드하고 나중에 초기화하려면 해당 개체를 별도의 펜촉에 넣고 필요에 따라 해당 펜촉을 명시 적으로로드하십시오.

+0

잘 모르겠습니다 ... 오브젝트가 뷰의 drawRect 메소드에 정의되어 있습니다. 펜촉이로드 될 때 왜 메소드가 호출 될지 확신 할 수 없습니다. 인터페이스 빌더에서 생성 된 객체에만 해당한다고 생각했습니다. 그게 내가해야할 일이 있다면, 어떻게 하위 뷰를위한 별도의 펜촉을 만들까요? – Arana

관련 문제