저는 "iPad 및 iPhone 응용 프로그램 개발"과정을 배우는 초보자입니다. , 나는 그것이 자바 스크립트 이벤트 리스너 비슷한 수 있습니다 궁금해 : - "(FaceView *) faceView (무효) setFaceView"강의 5의 데모에서 우리는 방법이개체 C의 UIView 초기 표시 메커니즘은 무엇입니까
#import "HappinessViewController.h"
#import "FaceView.h"
@interface HappinessViewController()
@property (nonatomic, weak) IBOutlet FaceView *faceView;
@end
@implementation HappinessViewController
@synthesize happiness = _happiness;
@synthesize faceView = _faceView;
-(void) setHappiness:(int)happiness
{
_happiness = happiness;
[self.faceView setNeedsDisplay];
}
-(void)setFaceView:(FaceView *)faceView
{
_faceView = faceView;
NSLog(@"set FaceView invoked");
[self.faceView addGestureRecognizer:[[UIPinchGestureRecognizer alloc]
initWithTarget:self.faceView action:@selector(pinch:)]];
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return YES;
}
@end
같은 일부 코드가 있습니다. 그러나 이벤트 리스너가 바인딩되었을 때 을 알고 싶습니다. 그래서 "NSLog (@"FaceView 호출 ") 설정;"; 이 세터 기능은 일단 내가이 프로그램을 실행하고 나면 매우 혼란 스럽다. 그래서 "setFaceView"가 맨 처음에 어떻게 호출되는지 궁금합니다.
그런데 FaceView는 UIView의 하위 클래스이며 faceView는 FaceView 클래스의 유일한 인스턴스입니다. 또한 "NSLog (@"행복을 불러 일으켰다 ")를 추가하려고합니다." 메소드 setHappiness에서이 은 프로그램 시작 부분에 호출되지 않습니다.
감사합니다. 이것은 faceView가 IBOutlet이기 때문에 가능합니다. 약한 포인터입니다. 먼저 클래스 FaceView가 인스턴스화 된 다음이를 가리키는 포인터 인 faceView를 설정합니다. 내가 맞 췄나? – zhouwubai
@zhouwubai 네, 인터페이스 뷰어는 IBOutlet으로 표시 되었기 때문에 인터페이스 빌더 (IB)에서 설정할 수 있습니다. 그것은 약한되는 한 self.faceView 자체 뷰로 추가 될 때 self.view에 의해 유지됩니다, 그래서 그것을 강력한 이유가 없습니다. self.faceView가 제거되어 self.view에 다시 추가 되었다면 강해야합니다. –