iOS开发Masonry框架源码解析

本文详细解析了iOS开发中Masonry框架的源码,探讨了其链式编程实现、对NSLayoutConstraint的封装以及约束创建和安装过程。Masonry通过UIView的Category提供接口,利用MASConstraintMaker支持约束的链式设置,并通过MASViewConstraint对象封装NSLayoutConstraint。
摘要由CSDN通过智能技术生成

iOS开发Masonry框架源码解析

前言:这个框架编程思想主要包括链式编程

这是一个iOS在控件布局中的轻量级框架,简化了NSLayoutConstraint的使用方式,让我们用链式变成的思想进行对View控件的约束。

本篇主要围绕Masonry框架源码进行解析,从而透析Masonry是如何对NSLayoutConstraint进行封装的。

####1.OC中的链式编程是如何实现的?
链式编程的好处:
点语法+事物+串联
1.简化代码
2.代码可读性高

调用:
self.where.select;

- (ViewController*)where{
	return self;
}

- (void)select{

}

用getter+有参数的时候应该如何写呢?


- (ViewController*)where{
	return self;
}
//block有保存代码块的特性
- (void(^)(NSString*))select{
	void(^block)(NSString *word) = ^(NSString *str){
		
	};
}

举个栗子:self.where.select(@“参数”)。

#####2.框架解析正文

Masonry框架和NSLayoutConstraint调用的对比:

###实际应用:
在这里插入图片描述
#####1.对谁做约束

View+MASAdditions 就是 Masonry 的一个外部的入口,实质上就是 UIView 的一个 Category 作用就是用来设置 MASViewAttribute 的属性,并实例化,并且指定当前的 UIView 对应的约束(LayoutAttribute)
MASUtilities.h 主要是这里除了平台相关代码外,还有些宏的定义和静态方法。Masonry 也对 iOS 和 macOS 做了兼容,在 macOS 里就是 NSView。

其中静态方法

static inline id _MASBoxValue(const char *type, ...)

是我们经常使用的 mas_equalTo 这个方法,这里可以看到它是如何支持变参和如何将 float,double,int 这样的值类型数据转换成和 equalTo 一样的对象 NSNumber 数据的。这个写法灵感来自GitHub - specta/expecta: A Matcher Framework for Objective-C/Cocoa 。 mas_equalTo 和 equalTo 都是宏定义的。

#define mas_equalTo(...)                 equalTo(MASBoxValue((__VA_ARGS__)))
#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value))
#define equalTo(...)                     mas_equalTo(__VA_ARGS__)

方法实现:

- (MASConstraint * (^)(id))equalTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值