NSArray比较
l- (BOOL)isEqualToArray:(NSArray *)otherArray
比较两个集合内容是否相同
l- (id)firstObjectCommonWithArray:(NSArray *)otherArray
返回两个集合中第一个相同的对象元素
NSArray给元素发送信息
l- (void)makeObjectsPerformSelector:(SEL)aSelector
l- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument
让集合里面的所有元素都执行aSelector这个方法
NSArray遍历
l普通遍历
NSUInteger count = [array count];
for (int i = 0; i < count; i++) {
id obj = [array objectAtIndex:i];
}
l快速遍历
for (id obj in array)
l迭代器遍历(查看NSEnumerator的用法)
lblock遍历
[array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
NSLog(@"%@ - %zi", object, index);
}]
NSEnumerator
l- (NSArray *)arrayByAddingObject:(id)anObject
添加一个元素,返回一个新的NSArray(方法调用者本身没有改变)
l- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray
添加otherArray的所有元素,返回一个新的NSArray(方法调用者本身没有改变)
l- (NSArray *)subarrayWithRange:(NSRange)range
截取range范围的数组元素
l- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
例如这样调用(假设array里面装着Student对象):
[array sortedArrayUsingSelector:@selector(compare:)]
那么Student必须实现compare:这个方法,按照Student的_name属性来排序
- (NSComparisonResult)compare:(Student *)stu {
return [_name compare:stu.name];
}
l- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
//typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
[array sortedArrayUsingComparator:^(Student *s1, Student *s2) {
return [s1.name compare:s2.name];
}]; // 按照name排序
l- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors
-单字段比较进行排序是比较简单,如果按照Student.book.name、Student.name、Student.ID这样的优先级进行排序,可以想象到它的复杂性.
-这个方法接收一组NSSortDescriptor对象作为参数.每个NSSortDescriptor对象指定一个key路径和排序方向(升序或者降序).数组中NSSortDescriptors的顺序决定每个字段的优先级. key路径允许用字段名称来get\set对象字段.访问子孙对象的字段,需要使用”.”这个分隔符
lNSSortDecriptor的初始化方法
u+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending
默认是用compare:作为比较方法
u+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending selector:(SEL)selector
可以传递一个selector设置比较方法
u+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr
可以传递一个block来专门比较
NSArray内存管理
l每当有一个对象添加到NSArray中,都会对这个对象做一次retain操作
l当NSArray被销毁时,会对内部存放的所有对象都做一次release操作
NSMutableArray
l可变的NSArray,NSArray的子类,可以随意的添加或者删除元素
l创建NSMutableArray的方法:
u+ (id)arrayWithCapacity:(NSUInteger)numItems
u- (id)initWithCapacity:(NSUInteger)numItems
l也可以使用创建NSArray的方法来创建NSMutableArray
l当一个元素被加到集合中时,会执行一次retain操作;当一个元素从集合中移除时,会执行一次release操作;当集合被销毁时(调用了dealloc),集合里的所有元素都会执行一次release操作(这个原则还适用于其他集合:NSDictionary\NSSet等)
NSMultableArray添加元素
l- (void)setArray:(NSArray *)otherArray
设置集合元素
l- (void)addObject:(id)anObject
添加一个元素
l- (void)addObjectsFromArray:(NSArray *)otherArray
添加otherArray的全部元素到集合中
l- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
在index位置插入一个元素
l- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes
在indexes指定的位置分别插入objects中的元素
NSMultableArray 删除元素
l- (void)removeLastObject
删除最后一个元素
l- (void)removeAllObjects
删除所有的元素
l- (void)removeObjectAtIndex:(NSUInteger)index
删除index位置的元素
l- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes
删除indexes位置的所有元素
l- (void)removeObject:(id)anObject
删除特定的元素
l- (void)removeObject:(id)anObject inRange:(NSRange)range
在range范围内查找特定的元素进行删除
l- (void)removeObjectsInArray:(NSArray *)otherArray
删除同时存在于otherArray和当前集合中的所有元素
l- (void)removeObjectsInRange:(NSRange)range
删除range范围内的所有元素
NSMultableArray 替换元素
l- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
用anObject替换index位置对应的元素
l- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects
用objects中的元素分别替换indexes对应位置的元素
l- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray range:(NSRange)otherRange
用otherArray中otherRange范围内的元素替换当前集合range范围内的元素
l- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray
用otherArray中的元素替换当前集合range范围内的元素
l- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2
交换idx1和idx2位置的元素
NSMultableArray 排序
l- (void)sortUsingDescriptors:(NSArray *)sortDescriptors
l- (void)sortUsingComparator:(NSComparator)cmptr
l- (void)sortUsingSelector:(SEL)comparator
用法参考NSArray的排序
NSMultableArray 内存管理
l每当有一个元素添加到NSMutableArray中,都会对这个元素做一次retain操作
l每当有一个对象从NSMutableArray中移除中,都会对这个元素做一次release操作
l当NSMutableArray被销毁时,会对内部存放的所有元素做一次release操作