iOS: 神奇的addSubView

看着addSubView, 本以为是添加多个对象, 但通过测试代码, 发现同一个对象在addSubView中只会添加一次. 想想, 视图对象是通过引用得到的. 在视图的子视图集中, 只保存一个相应的对象, 才不会造成系统的混乱.

    override func viewDidLoad() {
        super.viewDidLoad()

        
        var view2 = UIView(frame: CGRectZero)
        
        //重复添加多次
        for i in 1...50{
            view.addSubview(view2)
        }
        
        //结果, 只添加了一次
        //view.subviews中只有三项, 前两项是_UILayoutGuide
        println(view.subviews.count)
        for i in view.subviews{
            println(i)
        }
    }

 查看addSubView的帮助, 找到了原因:

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

视图有且只有一个父视图. 如果视图已经有一个父视图并且这个父视图不是将要添加的视图, 本方法会把视图原有的父视图移除, 将新视图设置为父视图.