23-NSArray(NSMutableArray)-Foundation

来源:互联网 发布:大数据基础平台架构 编辑:程序博客网 时间:2024/05/16 17:41
NSArray

l用来存储对象的有序列表,它是不可变的
l不能直接存储C语言中的基本数据类型,intfloatenumstruct,也不能存储nil
l创建NSArray的常用方法
l+ (id)array
l+ (id)arrayWithObject:(id)anObject
l+ (id)arrayWithObjects:(id)firstObj, ...
l+ (id)arrayWithArray:(NSArray *)array
l- (id)initWithObjects:(id)firstObj, ...
l- (id)initWithArray:(NSArray *)array
l+ (id)arrayWithContentsOfFile:(NSString *)path
l+ (id)arrayWithContentsOfURL:(NSURL *)url
l- (id)initWithContentsOfFile:(NSString *)path
l- (id)initWithContentsOfURL:(NSURL *)url

NSArray查询
l- (NSUInteger)count 

获取集合元素个数

l(BOOL)containsObject:(id)anObject

是否包含某一个元素

l- (id)lastObject

返回最后一个元素

l- (id)objectAtIndex:(NSUInteger)index

获得index位置对象的元素

l- (NSUInteger)indexOfObject:(id)anObject

查找元素的位置

l- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range

range范围内查找元素的位置


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集合的迭代器,可用于遍历集合元素
lNSArray有相应的方法来可以获取迭代器
u- (NSEnumerator *)objectEnumerator

获取一个正序遍历的迭代器

u(NSEnumerator *)reverseObjectEnumerator

获取一个反序遍历的迭代器

lNSEnumerator常用方法
u(id)nextObject

获取下一个元素

u(NSArray *)allObjects

获取没有被遍历过的元素




NSArray 派生出的集合
l- (NSArray *)arrayByAddingObject:(id)anObject

添加一个元素,返回一个新的NSArray(方法调用者本身没有改变)

l- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray

添加otherArray的所有元素,返回一个新的NSArray(方法调用者本身没有改变)

l- (NSArray *)subarrayWithRange:(NSRange)range

截取range范围的数组元素




NSArray其他方法
l- (NSString *)componentsJoinedByString:(NSString *)separator

separator作拼接符将数组元素拼接成一个字符串

l- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile

将一个NSArray持久化到文件中去


NSArray 排序
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.nameStudent.nameStudent.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操作
lNSArray被销毁时,会对内部存放的所有对象都做一次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

otherArrayotherRange范围内的元素替换当前集合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操作
lNSMutableArray被销毁时,会对内部存放的所有元素做一次release操作








0 0
原创粉丝点击