一.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]];
}
}
网友评论