美文网首页
位移枚举NS_OPTIONS详解

位移枚举NS_OPTIONS详解

作者: yanhooIT | 来源:发表于2018-04-11 19:02 被阅读25次

    位运算知识简介

    • 按位与&
      • 对应的两个二进制位均为1时,结果位才为1,否则为0(与1相&就保持原位,与0相&就为0)
      • 举例:9&5=1
      1001&0101=0001
      
    • 按位或|
      • 对应的两个二进制位有一个为1时,结果位就为1,否则为0
      • 举例:9|5=13
      1001|0101=1101
      
    • 左移<<
      • 把一个数的各个二进位全部左移n位,左移n位其实就是乘以2的n次方
      • 规则:高位丢弃,低位补0,举例说明:当左移的运算数是int 类型时,每移动1位它的第31位就要被丢弃
      • 举例:1<<4=16
      0001<<4=1 0000
      

    位移枚举定义

    • 第一个为NSUInteger这个为固定值
    • 第二个为枚举类型
    typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
        UIViewAutoresizingNone                 = 0,
        UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
        UIViewAutoresizingFlexibleWidth        = 1 << 1,
        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
        UIViewAutoresizingFlexibleHeight       = 1 << 4,
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    };
    

    位移枚举的作用

    • 可以同时存在多个枚举值(按|计算设置,下面会解释)
    • 举例
    self.view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
                               | UIViewAutoresizingFlexibleRightMargin
                               | UIViewAutoresizingFlexibleWidth
                               | UIViewAutoresizingFlexibleHeight;
    
    • 按位运算得出其本质
    self.view.autoresizingMask = 1 << 0 | 1 << 2 | 1 << 1 | 1 << 4;
    self.view.autoresizingMask = 0 0001 | 0 0100 | 0 0010 | 1 0000;
    self.view.autoresizingMask = 0 0101 | 0 0010 | 1 0000;
    self.view.autoresizingMask = 0 0111 | 1 0000;
    self.view.autoresizingMask = 1 0111;
    
    • 多枚举配置的使用,其他配置在使用时的判断类似
    // 1 0111 & 0 0001 = 0 0001,所以会指定代码逻辑1
    if((self.view.autoresizingMask & UIViewAutoresizingFlexibleLeftMargin) == UIViewAutoresizingFlexibleLeftMargin) {
        // 代码逻辑1
    }
    
    // 1 0111 & 1 0000 = 1 0000,所以会指定代码逻辑2
    if((self.view.autoresizingMask & UIViewAutoresizingFlexibleHeight) == UIViewAutoresizingFlexibleHeight) {
        // 代码逻辑2
    }
    

    总结

    • 设置位移枚举按位或|运算
    • 使用位移枚举按位与&运算

    参考文章

    相关文章

      网友评论

          本文标题:位移枚举NS_OPTIONS详解

          本文链接:https://www.haomeiwen.com/subject/uzszhftx.html