iOS确定NSMutableArray sortUsingComparator何时完成

时间:2014-03-07 13:06:06

标签: ios objective-c sorting nsarray

我按如下方式对可变数组进行排序:

[m_maFoundObjects sortUsingComparator:
 ^NSComparisonResult(id obj1, id obj2){
     FADObject * o1 = (FADObject *)obj1;
     FADObject * o2 = (FADObject *)obj2;
     return [o1.name compare:o2.name];
 }
 ];

有人可以告诉我确定排序何时完成的最佳方法,以便我可以在列表中调用reloadData吗?

2 个答案:

答案 0 :(得分:3)

排序是同步完成的,所以你应该可以在下一个语句中重新加载。

[m_maFoundObjects sortUsingComparator:
 ^NSComparisonResult(id obj1, id obj2){
     FADObject * o1 = (FADObject *)obj1;
     FADObject * o2 = (FADObject *)obj2;
     return [o1.name compare:o2.name];
 }
 ];

// Here you can reload your data

答案 1 :(得分:0)

有趣的是,所有数组排序方法都是同步运行的,甚至是sortWithOptions:usingComparator:,其选项值为NSSortConcurrent。

文档在这一点上保持沉默,但我只是测试并确认了。我写了一个测试比较器块,记录时间和线程ID,并记录排序前后的时间。使用足够大的数组,我能够看到比较器块从不同的线程同时触发,但排序方法在排序过程完成之前没有返回。

我刚刚发布了以下文档评论:

  

方法sortWithOptions:usingComparator:的文档是   不完整的。

     

即使指定了此方法,此方法也始终同步运行   选择NSSortConcurrent的值。

     

用简单的英语说:'这个方法直到数组才返回   即使你指定了NSSortConcurrent的排序选项,也会排序。“在那里   例如,可以在后台线程上调用比较器块,但是   该方法在返回控件之前等待排序完成   给来电者。

让我们所有人都发送有关此问题的反馈意见,因为如果Apple收到多份报告,Apple会更有可能解决这个问题。