IOS UIView 라이프 사이클의 인스턴스 상세 정보
모든 대상자는 하나의 생명 주기가 있는데, 즉, 모두 실례화되어 소각되는 과정이 존재한다.
UIView 대상도 예외가 아니다. 그렇다면 UIView는 init/new에서 시작한 후 dealloc가 끝날 때까지 어떤 과정을 거쳤을까?
먼저 UIView에서 상속된 객체 LifeView를 사용자화합니다.
#import
@interface LifeView : UIView
@end
#import "LifeView.h"
@interface LifeView ()
{
NSInteger count;
}
@end
@implementation LifeView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSLog(@"", __func__, @(count++));
}
return self;
}
- (void)willMoveToSuperview:(nullable UIView *)newSuperview
{
NSLog(@"", __func__, @(count++));
}
- (void)didMoveToSuperview
{
NSLog(@"", __func__, @(count++));
}
- (void)willMoveToWindow:(nullable UIWindow *)newWindow
{
NSLog(@"", __func__, @(count++));
}
- (void)didMoveToWindow
{
NSLog(@"", __func__, @(count++));
}
- (void)layoutSubviews
{
NSLog(@"", __func__, @(count++));
}
- (void)removeFromSuperview
{
NSLog(@"", __func__, @(count++));
}
- (void)dealloc
{
NSLog(@"", __func__, @(count++));
}
@end
그 다음에 B 보기 컨트롤러에서 실례화하고 부모 보기에 추가합니다
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"life view";
LifeView *lifeView = [[LifeView alloc] initWithFrame:CGRectMake(10.0, 80.0, 100.0, 100.0)];
[self.view addSubview:lifeView];
lifeView.tag = 1000;
lifeView.backgroundColor = [UIColor orangeColor];
}
B 뷰 컨트롤러가 push 또는 present로 표시될 때 호출되는 LifeView와 관련된 방법은 다음과 같습니다.
//
2017-06-16 00:37:10.694 DemoViewLife[3963:121184]
2017-06-16 00:37:10.695 DemoViewLife[3963:121184]
2017-06-16 00:37:10.695 DemoViewLife[3963:121184]
2017-06-16 00:37:10.697 DemoViewLife[3963:121184]
2017-06-16 00:37:10.697 DemoViewLife[3963:121184]
2017-06-16 00:37:10.701 DemoViewLife[3963:121184]
B 뷰 컨트롤러가 pop 또는 dismiss일 때 호출되는 LifeView와 관련된 방법은 다음과 같습니다.
//
2017-06-16 00:37:25.514 DemoViewLife[3963:121184]
2017-06-16 00:37:25.514 DemoViewLife[3963:121184]
2017-06-16 00:37:25.515 DemoViewLife[3963:121184]
2017-06-16 00:37:25.516 DemoViewLife[3963:121184]
2017-06-16 00:37:25.518 DemoViewLife[3963:121184]
인쇄 정보에서 볼 수 있는 방법인'removeFrom Superview'가 두 번 호출되었는데 이것은 B 보기 컨트롤러에서 이 방법을 주동적으로 호출했기 때문이다.이 방법을 주동적으로 사용하지 않으면 한 번만 호출된다.
또 두 번 실행된 방법으로는'will Move Towindow'와'did Move Towindow'가 있다.new Window가 존재할 때, 실례화 생성이 처음 호출되는 것을 잘 구분할 수 있습니다.new Window가 nil일 때, 삭제됩니다. 즉, 생명주기가 끝납니다.
궁금한 점이 있으면 댓글을 남기거나 본 사이트 지역사회에 가서 토론을 교류하고 읽어주셔서 감사합니다. 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.