-awakeFromNib
의 요점은 그래서 당신이 펜촉에서 다른 개체에 대한 모든 연결이 설정되어 있는지 확인 할 수 있습니다 때 초기화 물건을 할 수 있다는 것입니다.
펜촉 로딩 인프라는 펜촉 아카이브에서 다시 각 객체에로 awakeFromNib 메시지를 전송하지만 에있는 모든 오브젝트 후 아카이브가로드되고 초기화되었다. 객체가 awakeFromNib 메시지를 수신하면 모든 콘센트와 동작 연결이 이미 설정되어있는 것이 보장됩니다.
super
을 잊지 마십시오.
언제든지 곧 사라지지 않을 것입니다. 코드를 너무 많이 사용하면 전환 기간이 길어질 수 있습니다. 예, 그 이름은 이전의 "nib"파일 형식에서 왔지만 this stack overflow question은 파일 확장자의 차이점을 제거합니다.
요약하면 클래스의 내부 인스턴스 변수를 설정할 때 두 방법 중 하나를 사용할 수 있습니다. init
메서드 (-initWithCoder
포함) 안에는 setter가 완전히 초기화되는 클래스에 의존하는 경우에 setter 메서드를 사용하는 것이 안전하지 않을 수 있습니다 (소스 WWDC 2012 비디오는 현대 objective-c로 이동 함). 예는 nib 파일의 다른 객체를 참조하는 속성을 설정하는 것입니다.
UIViewController
하위 클래스 -initWithCoder
은 스토리 보드에서로드 할 때만 호출됩니다. 스토리 보드를 사용하든 사용하지 않든간에 -awakeFromNib
이 호출되므로 사용하지 않는 것이 좋습니다.
당신이 고려할 수 있습니다 또 다른 패턴은 게으른 게터입니다 :
-(NSMutableArray *)articles{
if (_articles){
return _articles;
}
_articles = [[NSMutableArray alloc] init];
return _articles;
}
이 방법의 장점은 배열에 추가 설정을하고 싶다면 당신이하지 않을 때 쉽게 배열을 폐기 할 수 있다는 것입니다 더 이상 필요 없으며 다음번에 부동산에 액세스 할 때 다시 새로운 것이 있습니다.
좋은데,'-initWithCoder :'는 UIViewController에서 호출되지 않습니다. – CodaFi
Storyboard에서 인스턴스화 된 UIViewController 하위 클래스의'initWithCoder' 메서드에 중단 점을 넣었습니다. 디버거가 중단 점에 도달했습니다. [문서] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10)이 동작을 확인합니다. – Jeff
스토리 보드에서로드 할 때'-awakeFromNib'도 표시됩니다. – jackslash