简单的NSArray - 将对象带到前面的NSArray

时间:2015-01-10 02:19:46

标签: ios objective-c nsarray

NSarray的简单问题。我有对象存储在NSMuteableArray中。 [obj1,obj2,obj3]

如果选择了一个对象,我想把它带到数组的前面。即如果选择了obj3,那么:

[obj3,obj1,obj2]

以下工作或重复obj3?此外,这可以使线程安全吗?

[myMutableArray insertObject:obj3 atIndex:0];

2 个答案:

答案 0 :(得分:4)

假设您需要保留其他元素的顺序,您需要删除然后插入有问题的对象:

NSMutableArray *array = ... // array with objects
NSInteger index = ... // index of object to move to the front
id obj = array[index];
[array removeObjectAtIndex:index];
[array insertObject:obj atIndex:0];

答案 1 :(得分:3)

您的代码将在数组的前面插入另一个对obj3的引用(即数组现在将包含4个元素),但它实际上不会复制该对象。

您需要使用exchangeObjectAtIndex:withObjectAtIndex -

[myMutableArray exchangeObjectAtIndex:0 withObjectAtIndex:selectedIndex]

其中selectedIndex是所选对象的索引。

NSMutableArray不是线程安全的,因此如果您可能从多个线程修改它或在另一个线程迭代它时修改它,则需要将@synchronizsed(myMutableArray)包围在对此数组的访问中。

如果要保留超出第一个元素的数组顺序,则需要执行单独的删除和插入操作 -

id someObject=myMutableArray[selectedIndex];
[myMutableArray removeObjectAtIndex:selectedIndex];
[myMutableArray insertObject:someObject atIndex:0];