Masonry源码链式函数

在研究Masonry源代码之前,自己也尝试书写了一边简易版的Masonry,我写的简易版学习代码可以去参考我的github源码,实现绝大部分常用函数功能(当然肯定会有不少Bug),自己书写一边,体会更深,了解更透彻。剖开了Masonry源代码之后,令我印象最深的是链式函数书写。
通常我们使用Masonry自动布局控件的时候使用点语法用起来非常方便流畅,但这是如何书写的呢?

下面为大家讲解一下:
1,点语法需要在头文件中声明函数


image.png

此种方法就像我们平常使用getter函数一样是直接获取属性值。

2,为什么可以直接无限个点函数执行
方式1:可以直接返回操作对象,然后利用对象继续操作内部函数,比如


image.png

top函数执行完后直接返回MASContraintMaker对象
又或者


image.png

直接返回MASConstraint对象,从而可以无限调用对象对应的操作函数。
方式2:(重点难点)
利用block

image.png

重点看一下这个函数是如何执行的
我们一步一步分析:
step1:
左边点语法的equalTo先获取返回的block,注意先看返回的block,不要看括号里面的参数
step2:
看右边block的实际返回是什么,
return ^id(id attribute) {
........
};

MASConstraint * (^)(id)
step3:
左边block的参数是什么?这时候看左边的equalTo()里面的参数为@100,赋值给右边的attribute并执行
step4:
return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
执行内部函数并且返回实例对象(MASConstraint *),执行完毕返回的该对象就可以继续执行其他的内部函数了。

不知道你看懂了没,多看几遍多琢磨几遍就可以看懂了,这个链式函数有点绕。

你可能感兴趣的:(Masonry源码链式函数)