UIView生命周期

本文详细探讨了UIView的生命周期,包括常见方法、添加与移除过程、与UIWindow和superView的关系,以及如何通过方法调用来判断视图的状态。通过测试和官方文档,解析了在视图添加、移除时,相关方法的调用顺序和原因,帮助读者深入理解UIView的生命周期机制。
摘要由CSDN通过智能技术生成

    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值