美文网首页
关于NSObjCRuntime类的几个枚举属性

关于NSObjCRuntime类的几个枚举属性

作者: 浅_若清风 | 来源:发表于2021-08-10 09:36 被阅读0次
一.NS_CLOSED_ENUM

操作数的比较

typedef NS_CLOSED_ENUM(NSInteger, NSComparisonResult)
 {
    NSOrderedAscending = -1L,//左边的字符大于右边的字符
    NSOrderedSame,//左边的字符等于右边的字符
    NSOrderedDescending//左边的字符大于右边的字符
};

示例:App版本升级时,使用NSString的"compare...options..."方法对版本号进行比较

if ([@"版本号A" compare:@"版本号B" options:NSNumericSearch] != NSOrderedDescending) 
{
     //版本号A>版本号B
}
二.NS_OPTIONS

数组的并发混序、倒序遍历方法

typedef NS_OPTIONS(NSUInteger, NSEnumerationOptions)
 {
    NSEnumerationConcurrent = (1UL << 0),//并行发生, 并发混序
    NSEnumerationReverse = (1UL << 1),//倒序执行
};

示例:idx表示数组的下标位置,obj表示数组小标位置对应的值

NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"A",@"B",@"C", nil];[arr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)
 {
        NSLog(@"位置:%ld,值:%@",idx,obj);
}];
//打印的值为
位置:2,值:C
位置:1,值:B
位置:0,值:A
三.NS_OPTIONS
typedef NS_OPTIONS(NSUInteger, NSSortOptions)
 {
    NSSortConcurrent = (1UL << 0),//高效的但不稳定的排序算法(快速排序)
    NSSortStable = (1UL << 4),//稳定的排序算法(冒泡排序、插入排序)
};

示例:使用NSArray的"sortedArrayWithOptions...usingComparator..."方法进行排序,obj1和obj2是遍历数组时读取出的元素,可对obj1和obj2进行排序指定或判断。

NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"A",@"B",@"C", nil];
NSArray *resultArray = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2)
 {
        //在此进行操作
        return [obj1 compare:obj2];
}];
NSLog(@"结果值:%@",resultArray);
//打印的值为
结果值:A
结果值:B
结果值:C
四. NS_ENUM
typedef NS_ENUM(NSInteger, NSQualityOfService)
 {
    NSQualityOfServiceUserInteractive = 0x21,//最高优先级(用于用户交互事件。如动画,需一瞬间完成)
    NSQualityOfServiceUserInitiated = 0x19,//次高优先级(用户发起的并且需要立即得到结果的任务。如tableview的cell加载,需几秒内完成)
    NSQualityOfServiceUtility = 0x11,//普通优先级(如下载任务,不需要立刻返回结果)
    NSQualityOfServiceBackground = 0x09,//最低优先级(用户不可见任务。如后台备份操作,需长时间才能完成)
    NSQualityOfServiceDefault = -1//默认优先级(当没有 QoS信息时默认使用)
} API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));

示例:在线程中使用优先级,qualityOfService为设置线程优先级的属性。

//创建线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadload) object:nil];
//设置线程优先级
thread.qualityOfService = NSQualityOfServiceDefault;
//启动线程
[self.thread start];
- (void)threadload
{
    //设置名字
    [[NSThread currentThread] setName:@"name"];
    NSRunLoop *loop = [NSRunLoop currentRunLoop];
    //添加数据
    [loop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
    while (![[NSThread currentThread] isCancelled])
    {
        //启动NSRunLoop
        [loop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
    }
}

相关文章

  • 关于NSObjCRuntime类的几个枚举属性

    一.NS_CLOSED_ENUM 操作数的比较 示例:App版本升级时,使用NSString的"compare.....

  • Kotlin之枚举和''when'

    声明枚举类 声明简单的枚举 声明带属性的枚举,在每个常量创建的时候指定属性值 使用"when"处理枚举类 when...

  • Swift 属性基本使用

    存储属性 <类 枚举 结构体> 的常量或变量(有具体存储空间) 计算属性 <类 枚举 结构体> 属性函数(无存...

  • 10_属性

    属性将值跟特定的类、结构或枚举关联。计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。 存储属性和计算...

  • Kotlin面向对象 (6)枚举类

    枚举类构造函数枚举常用属性和函数 kotlin 中使用 enum 和 class 两个关键词声明枚举类。 枚举类使...

  • Swift---10.属性

    属性(类,结构体或枚举中,某一个成员变量,就是该类,结构体或枚举的属性)存储属性 存在于类,结构体中,枚举中不存在...

  • iOS-Swift-属性

    先看总结:枚举、结构体、类都能定义⽅法、计算属性、下标(包括实例的、类的)计算属性和下标的本质还是方法 枚举、结构...

  • Swift学习笔记(五)--属性和方法

    属性(Stored Properties) 类,结构体和枚举都可以拥有属性, 之前在枚举中已经稍微提过,属性分为存...

  • Kotlin 枚举类

    枚举类最基本的用法是实现一个类型安全的枚举。枚举常量用逗号分隔,每个枚举常量都是一个对象。 相关属性、方法 枚举类...

  • 20、【Swift】扩展 - Extensions

    适用:结构体、枚举、枚举、协议 使用场景增加计算属性(实例和类)【不能扩充存储属性】方法(实例或)构造器下标嵌套类...

网友评论

      本文标题:关于NSObjCRuntime类的几个枚举属性

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