YYModel源码分析(二)

2019-05-14  本文已影响0人  Devbrave

前言

YYClassInfo该文件中定义了四个类,要了解这四个类我们需要了解一些runtime的知识。

YYCLassInfo

下面介绍一下YYCLassInfo中关类的相关理解。

YYClassInfo.png

拓展

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,//0000 0001
    UIViewAutoresizingFlexibleWidth        = 1 << 1,//0000 0010
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,//0000 0100
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,//0000 1000
    UIViewAutoresizingFlexibleHeight       = 1 << 4,//0001 0000
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5//0010 0000
};   // 赋值

要实现视图的宽高自适应一般如下定义:

UIViewAutoresizing resizing = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

转换为二进制计算:

IViewAutoresizing resizing = 0000 0010 | 0001 0000;

这样就实现了变量保存多个枚举值。那么如何判断变量是否包含某个枚举值了,这的通过与操作。比如我要判断是否包含了UIViewAutoresizingFlexibleWidth

if (resizing & UIViewAutoresizingFlexibleWidth) {
       // UIViewAutoresizingFlexibleWidth is set
}

对应的二进制:

if (00010010 & 00000010) {
}

00010010 & 00000010很明显不等于0,所以返回的事YES。那么用不包含的试一下。

if  (resizing & UIViewAutoresizingFlexibleLeftMargin)  {
}

对应的二进制:

if  (00010010 & 0000 0001)  {
}

可以看出00010010 & 0000 0001 = 0,所以能够知道resizing不包含UIViewAutoresizingFlexibleLeftMargin
通过以上的这种方式实现了一个变量保存多个枚举值。也就是NS_OPTIONS的原理。

上一篇 下一篇

猜你喜欢

热点阅读