UIView和UIViewController一样,也有自己的生命周期。
UIView生命周期包含的常见方法
UIView包含的常见方法如下:
- (void)didAddSubview:(UIView *)subview;
- (void)willRemoveSubview:(UIView *)subview;
- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
- (void)didMoveToSuperview;
- (void)willMoveToWindow:(nullable UIWindow *)newWindow;
- (void)didMoveToWindow;
另外添加了View常见的构造函数,析构函数,等,如下,一起分析(仅做简单分析,以上面六个为主):
- (instancetype)init;
- (void)dealloc;
- (void)removeFromSuperview;
- (void)drawRect:(CGRect)rect;
- (void)layoutSubviews;
生命周期方法简单分析
搭建测试工程,工程简单框架如下:
PS:ViewController是第一个VC,中间有一个按钮。SecoundViewController是第二个视图,中间有一个测试视图,即TestView对象。还有俩按钮,分别是移除TestView(TestView.removeFromSupperView),和重置TestView的Frame。
在测试类中依次打印上述几个方法,代码如下(顺序不对,但不影响结果):
#import "TestView.h"
@implementation TestView{
NSInteger _count;
}
- (instancetype)init{
if (self = [super init]) {
_count = 0;
NSLog(@"%@", [NSString stringWithFormat:@"%@ ==> %ld",NSStringFromSelector(_cmd),_count]);
}
return self;
}
- (void)layoutSubviews{
[super layoutSubviews];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)didAddSubview:(UIView *)subview{
[super didAddSubview:subview];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)willRemoveSubview:(UIView *)subview{
[super willRemoveSubview:subview]; _count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)willMoveToSuperview:(nullable UIView *)newSuperview{
[super willMoveToSuperview:newSuperview];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)drawRect:(CGRect)rect{
[super drawRect:rect];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)didMoveToSuperview{ [super didMoveToSuperview];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)willMoveToWindow:(nullable UIWindow *)newWindow{
[super willMoveToWindow:newWindow];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)didMoveToWindow{
[super didMoveToWindow];
_count++;
NSLog(@"%@ ==> %ld",NSStringFromSelector(_cmd),_count);
}
- (void)removeFromSuperview