处理文件所有者对象的awakeFromNib

我知道有很多相关的问题,为什么awakeFromNib在实例化一些视图时没有被调用。 从Nib唤醒某个视图的消息将被发送到视图本身,并且该消息不会传递给文件所有者。 我看到了为什么我的清醒不会从火中消失? 。

那么,如果你创build一个视图的实例,其文件的所有者本身在xib文件中会发生什么?

换句话说,你有你自己的自定义视图名为MyCustomView.swift和MyCustomView.xib。 在xib文件中,将文件的所有者设置为MyCustomView 。 所以,当你创buildMyCustomView的实例时, awakeFromNib会被调用吗? 在我的情况下, awakeFromNib似乎并没有被调用。 然而,视图本身是真正实例化的。 所以,对于我来说, awakeFromNib没有被调用是很奇怪的。

有谁能解释这件事吗?

仅供参考:我准备了BaseCustomView.swiftBaseCustomView有两个init

 override init(frame: CGRect) { super.init(frame: frame) commonInit() } 

 required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonInit() } 

commonInit()就是这样。

 private func commonInit() { // load custom view's xib let bundle = Bundle(for: type(of: self)) let nib = UINib(nibName: self.className(), bundle: bundle) let view = nib.instantiate(withOwner: self, options: nil).first as! UIView addSubview(view) // make custom view's size the same size with itself view.translatesAutoresizingMaskIntoConstraints = false let bindings = ["view": view] addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|", options:NSLayoutFormatOptions(rawValue: 0), metrics:nil, views: bindings)) addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|", options:NSLayoutFormatOptions(rawValue: 0), metrics:nil, views: bindings)) } 

而customView只是覆盖这个BaseCustomView的类。 另外,customView的文件所有者是customView本身。

更多编辑:自定义视图类是这样的。 而实际上awakeFromNib()没有被调用。

 final class MyCustomView: BaseCustomView { override func awakeFromNib() { // do something } } 

笔尖中的“文件所有者”项目有点特别:它不是真正的对象,因为其他项目是这样的。 这是一个占位符 , 当nib被实例化时 ,这个占位符被一个预先存在的对象填充。

所以,文件的所有者并不是真的被其他对象所“唤醒”。 它是笔尖未被存档之前创build的。 因此,接收awakeFromNib并没有什么意义。