MST

星途 面试题库

面试题:Objective-C中NS_ENUM与NS_OPTIONS的基础区别

请阐述在Objective-C里NS_ENUM与NS_OPTIONS在定义和使用场景上的主要区别。并各举一个简单的代码示例说明。
40.4万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

区别

  1. 定义区别
    • NS_ENUM 用于定义普通的枚举类型,其值通常是互不相关的离散值。它定义的枚举成员是单一的值,一般用于表示一个特定的状态或选项。
    • NS_OPTIONS 用于定义可以进行按位运算(如或运算 |)的枚举类型。其枚举成员的值是2的幂次方(1、2、4、8...),这样可以通过按位或运算组合多个选项。
  2. 使用场景区别
    • NS_ENUM 适用于只有一个选项有效的情况,例如表示方向(上、下、左、右),一次只能是其中一个方向。
    • NS_OPTIONS 适用于可以同时选择多个选项的情况,比如文件权限(可读、可写、可执行,这些权限可以同时存在)。

代码示例

  1. NS_ENUM示例
typedef NS_ENUM(NSUInteger, Direction) {
    DirectionUp,
    DirectionDown,
    DirectionLeft,
    DirectionRight
};

// 使用
Direction myDirection = DirectionUp;
  1. NS_OPTIONS示例
typedef NS_OPTIONS(NSUInteger, FilePermissions) {
    FilePermissionRead = 1 << 0,
    FilePermissionWrite = 1 << 1,
    FilePermissionExecute = 1 << 2
};

// 使用
FilePermissions myPermissions = FilePermissionRead | FilePermissionWrite;