简单 NSArray - 将对象置于 NSArray 前面
Simple NSArray - Bring object to to front NSArray
关于 NSarray 的简单问题。我将对象存储在 NSMuteableArray 中。
[obj1, obj2, obj3]
如果选择了一个对象,我想把它放在数组的前面。 IE。如果选择 obj3,则:
[obj3, obj1, obj2]
以下是否有效或重复 obj3?另外,这可以使线程安全吗?
[myMutableArray insertObject:obj3 atIndex:0];
您的代码将在数组的前面插入另一个对 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];
假设您需要保留其他元素的顺序,您需要删除然后插入有问题的对象:
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];
关于 NSarray 的简单问题。我将对象存储在 NSMuteableArray 中。 [obj1, obj2, obj3]
如果选择了一个对象,我想把它放在数组的前面。 IE。如果选择 obj3,则:
[obj3, obj1, obj2]
以下是否有效或重复 obj3?另外,这可以使线程安全吗?
[myMutableArray insertObject:obj3 atIndex:0];
您的代码将在数组的前面插入另一个对 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];
假设您需要保留其他元素的顺序,您需要删除然后插入有问题的对象:
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];