首页 > 解决方案 > 如何取消 sortUsingComparator

问题描述

当数组排序时, [arr sortUsingComparator:sortByTime] 然后我想取消操作。我应该怎么办?

标签: objective-cnsarray

解决方案


我认为这不容易。大概您正在并发环境中工作。然后这样的事情应该会导致排序快速退出。当您设置它时,您还需要同步对sortCancelBOOL 的访问,就像您获取它时一样,如下所示。

__block BOOL sortCancel = NO;
NSObject * lock = NSObject.new;    // Sync access to sortCancel

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
 
    @synchronized ( lock ) {
       // Check for cancel
       if ( sortCancel ) {
         // Sort has been cancelled
         return (NSComparisonResult)NSOrderedSame;
       }
    }

    // 'Normal' compare, e.g.
    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
 
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

我没有对此进行测试,但这应该会破坏排序或使其快速完成。

我想知道你为什么要中止排序?


推荐阅读