这个文件是整个库的头文件。顾名思义,使用时引入这个头文件,就可以使用这个文件中引入的所有文件。
先看源码
#import <Foundation/Foundation.h>
//! Project version number for Masonry.
FOUNDATION_EXPORT double MasonryVersionNumber;
//! Project version string for Masonry.
FOUNDATION_EXPORT const unsigned char MasonryVersionString[];
#import "MASUtilities.h"
#import "View+MASAdditions.h"
#import "View+MASShorthandAdditions.h"
#import "ViewController+MASAdditions.h"
#import "NSArray+MASAdditions.h"
#import "NSArray+MASShorthandAdditions.h"
#import "MASConstraint.h"
#import "MASCompositeConstraint.h"
#import "MASViewAttribute.h"
#import "MASViewConstraint.h"
#import "MASConstraintMaker.h"
#import "MASLayoutConstraint.h"
#import "NSLayoutConstraint+MASDebugAdditions.h"
这个文件代码很简单,但有几个点还是要说一下。
1,#import <Foundation/Foundation.h>。这里使用import引入了系统的Foundation框架。如果你还没有看过这个框架,建议看一下。里面包含了很多常用的API。记得某个大神讲过:软件开发的基础由三个部分组成:操作系统,网络+算法。了解操作系统的开发,最基本的要求就是熟悉它的开发API;Foundation既然是系统库,那任何文件都可以引入它。好,这里有个问题,如果我们自定义一个类,引入了Masonry这个头文件,同时又引入了Foundation这个框架,会怎么样?难道系统会引入两次Foundation吗?当然不会了。学过C语言的同学应该知道#include这个关键字吧。同时,你应该了解@class的用法。将这三兄弟对比一下,你就会明白为什么不会了。
#include:C的关键字,作用是引入某个文件,缺点:会有重复引入的问题。
#import:OC的关键字,作用是引入某个文件,但可以避免重复引入的问题。
@class:OC的关键字,作用是告诉编译器,存在这个文件。用于.h文件中,用来加快编译速度。
如果要深刻理解这三个的区别,必须要了解程序的链接过程和意义。推荐一本我最爱的书《程序员的自我修养》。这本书虽然读起来不如小说有趣,但如饮酒,初饮辛辣难入喉,再饮一秒就上头,三饮发誓再不喝,四饮保你无忧愁。
2,FOUNDATION_EXPORT。这是个什么鬼?好,我们根据以往的经验猜一猜,这个是用来干啥的?放在文件的靠前位置,后面跟了一个某类型的未初始化的指针。猜到了没有?想想#define。想想既然这里没有定义,那为什么要写在这里?不饶了,我自己都晕了。这个是用来定义一个常量的,作用上和#define一样,但这个大神为什么选择用它而不用#define呢?当然不是因为心情好。
==>检测字符串的值是否相等的时候效率更快
FOUNDATION_EXPORT可以直接使用(myString == MyFirstConstant)来比较,
而define则使用的是([myString isEqualToString: MyFirstContant])
第一种是直接比较指针地址
第二种则是一一比较字符串的每一个字符是否相等.
==>宏定义会严重拖慢程序的编译速度。编译型语言先天不足,不如解释性语言。如果项目中使用了大量的宏定义,当你不得不更改其中某个值的时候,在项目后期,你会眼巴巴的看着进度条在那里慢悠悠的调戏你。
==>宏定义编译时只进行替换,不进行类型校验;而FOUNDATION_EXPORT会进行类型校验。这样在编译期就可以发现一些问题。
读读这本书《程序员的自我修养》。你不会失望。
3,由包含的文件而引发的思考。
库中的文件在这里一目了然。这里包含的所有的文件。
注意,前方高能!!!!!!!!!!!!
为什么会存在这些文件?
每个文件是干什么用的?
每个文件为什么要这样组织?
文件之间的联系是什么?
这些联系体现了什么?
现在回到我的第一篇文章iOS进阶之masonry居高临下想想这些问题吧少年。
主动思考从来都优于被动接受。
相关链接:
程序员的自我修养。请Star一下,表示你愿意和我交朋友。哈哈。
网友评论