咱們通常來講會這樣進行使用html
咱們再去看看install的方法,其內部就是去先去獲取view的全部的約束,而後進行移除,以後再去安裝新的約束ios
這個時候你們確定很疑惑,What? 我約束都尚未添加,怎麼直接開始遍歷了? 其實咱們在block中執行make.left.width這個時候其實就已經在添加約束了,先來看下在調用.left的時候調用的MASConstraintMaker的方法數組
返回值是MASConstriant,因此咱們在make.left以後再.width實際上是調用的是MASConstraint的width方法了其中這個方法是個抽象方法定義在MASConstraint類中。xcode
而後以後調用的就是MASViewConstraint中的addConstraintWithLayoutAttribute方法app
而後咱們點進上面的self.delegate 調用的方法進去看看,調用的是下面的方法,這裏其實就能夠理解爲把left和Width的約束進行合併成爲一個約束集合類oop
再去看看constraintMaker中的install方法中的NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view];裏面的installedConstraintsForView方法內部調用了mas_installedConstraints的get方法,而後去獲取全部的對象,也就是這裏面的方法佈局
再去看看這個get方法其實就是運用了運行時的知識post
而後再去看看關於uninstall方法的實現,這個方法的實現就是先判斷能不能相應active方法,由於這個屬性是ios8纔出現的flex
咱們再去看看安裝新約束當中的install方法ui
關於上面判斷是否只存在constant不同的視圖的方法
關於self.hasBeenInstalled其實就是調用了下面的方法
其實Masonry就是對系統自己的自動佈局的layout進行了封裝