IOS之UIView的生命周期

IOS之UIView的生命周期

1. 代码创建

private lazy var testView = TestView()
  1. 使用init方法,底层会执行init(frame: CGRect) {}方法,frame为默认值zero,如果直接调用init(frame: CGRect) {}方法也是可以的
  2. willMove(toSuperview newSuperview: UIView?) {}: 即将加入到父视图或则从父视图移出, 如果是加入,则参数newSuperview的值为当前父视图, 如果是移出,则参数的值为nil
  3. didMoveToSuperview() {}:完全加入父视图,或则从父视图中完全移出,会调用此方法
  4. willMove(toWindow newWindow: UIWindow?) {}: 即将加入到当前窗口,参数newWindow表示当窗口对象;或则表示即将从当前窗口移出,参数为nil
  5. didMoveToWindow() {}: 完全添加到当前窗口中, 或则完全的从当前窗口中移出
  6. layoutSubviews() {}: 对所有子视图进行布局时调用
  7. deinit{}: 表示当前对象销毁时调用(当前视图从父视图中移出,并设置为nil)

2. XIB创建View

testXIBView = (Bundle.main.loadNibNamed("TestXIBView", owner: nil, options: nil)?.first as! TestXIBView)
  1. 通过XIB创建的View会首先调用required init?(coder: NSCoder) {}方法 进行反序列化
  2. func awakeFromNib() {}: 通过xib反序列化后唤醒,初始化,此时空间是存在的
  3. 然后上代码创建View一样依次调用:willMoveToSuperviewdidMoveToSuperviewwillMoveToWindowdidMoveToWindowlayoutSubviews等方法
  4. 调用func draw(_ rect: CGRect){}:通过XIB文件创建的view在结束布局之后进行绘制
  5. deinit{}: 表示当前对象销毁时调用(当前视图从父视图中移出,并设置为nil)

3. 总结

  • 无论是代码还是xib创建的view,在添加到容器或则从容器中移出,都会调用willMoveToSuperviewdidMoveToSuperviewwillMoveToWindowdidMoveToWindow这个四个方法
  • 纯代码创建view,只要调用init方法,就一定会调用initWithFrame方法。
  • 使用xib创建view时,会调用required init?(coder: NSCoder) {}awakeFromNib这两个放进行反序列化和唤醒
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值