• NS_ENUM和NS_OPTIONS


    NS_ENUM  NS_OPTIONS iOS 6 / OS X Mountain Lion才开始有,他们都是用来代替 enum 的。

     借用C的写法:只定义值,不定义类型

     1 enum {

    2  UITableViewCellStyleDefault,
    3  UITableViewCellStyleValue1,
    4  UITableViewCellStyleValue2,
    5  UITableViewCellStyleSubtitle
    6  };

     借用C的写法:定义值的同时定义类型

     1 typedef enum {

    2  UITableViewCellStyleDefault,
    3  UITableViewCellStyleValue1,
    4  UITableViewCellStyleValue2,
    5  UITableViewCellStyleSubtitle
    6  } UITableViewCellStyle;

     特性参数类型: UITableViewCellStyle

     

     

     苹果自己的方法:之前苹果自己的代码

     1 typedef enum {

    2  UITableViewCellStyleDefault,
    3  UITableViewCellStyleValue1,
    4  UITableViewCellStyleValue2,
    5  UITableViewCellStyleSubtitle
    6  };
    7  
    8  typedef NSInteger UITableViewCellStyle;

     给出了 UITableViewCellStyle 确定的大小,但并没有告诉编译器这个类型和之前的 enum 有什么关系。

     

     针对以上情况,苹果有了宏统一

     NS_ENUM的写法:

     1 typedef NS_ENUM(NSInteger, UITableViewCellStyle) {

    2  UITableViewCellStyleDefault,
    3  UITableViewCellStyleValue1,
    4  UITableViewCellStyleValue2,
    5  UITableViewCellStyleSubtitle
    6  };

     

     NS_ENUM 的第一个参数是用于存储的新类型的类型。在64位环境下,UITableViewCellStyle  NSInteger 一样有8bytes长。你要保证你给出的所有值能被该类型容纳,否则就会产生错误。第二个参数是新类型的名字。大括号里面和以前一样,是你要定义的各种值。

     

     这种实现方法提取了之前各种不同实现的优点,甚至有提示编辑器在进行 switch 判断时检查类型匹配的功能。

     


     NS_OPTIONS

     

     enum 也可以被定义为按位掩码(bitmask)。用简单的OR (|)AND (&)数学运算即可实现对一个整型值的编码。每一个值不是自动被赋予从0开始依次累加1的值,而是手动被赋予一个带有一个bit偏移量的值:类似1 << 0 1 << 1 1 << 2等。如果你能够心算出每个数字的二进制表示法,例如:10110 代表 22,每一位都可以被认为是一个单独的布尔值。例如在UIKit中, UIViewAutoresizing 就是一个可以表示任何flexible topbottom left  right marginswidthheight组合的位掩码。

     

     不像 NS_ENUM ,位掩码用 NS_OPTIONS 宏。

     

     语法和 NS_ENUM 完全相同,但这个宏提示编译器值是如果通过位掩码 组合在一起的。同样的,注意值的区间不要超过所使用类型的最大容纳范围。

     

     NS_ENUM  NS_OPTIONS 都是Objective-C开发中的提升开发体验的新特性,也再次展示了这门语言在对象化和过程化之间健康和谐的辩证关系。记住这一点,它就好像在你成长的道路中认识到的:我们身边的万物都是运作在矛盾且共存的严谨逻辑关系中。

     

     注:本文是根据:http://nshipster.cn/ns_enum-ns_options/写出的,因原文只能分享到新浪微博,所以这里无法分享,只得把重要内容在这里做了整理。再次感谢Mattt Thompson  Croath Liu

  • 相关阅读:
    html之colspan && rowspan讲解
    html之cellspacing && cellpadding讲解
    JavaScript之setcookie()讲解
    Tomcat漏洞说明与安全加固
    ActionScript基本语法讲解
    2014年03月09日攻击百度贴吧的XSS蠕虫源码
    Samy XSS Worm之源码讲解
    新浪微博之XSS蠕虫脚本源码讲解
    JavaScript之match()方法讲解
    JavaScript之substring()方法讲解
  • 原文地址:https://www.cnblogs.com/NINIiOS/p/4016501.html
Copyright © 2020-2023  润新知