NSArray是OC中的数组类型,本质是一个Cocoa类,用来存储对象的有序列表。你可以在NSArray中存储任意类型的对象:NSString、NSObject(这里代指所有类)、对象、其他数组、字典等等。
NSArray有一定的限制:只能存储Objective-C的对象,不能存储原始的C语言的基础数据类型,如int、float、enum、struct和NSArray中的随机指针。也不可以存储nil(对象的零值,NULL更不可能)
创建NSArray:通过arrayWithObjects类方法创建NSArray,创建即赋值,每个元素以逗号隔开,末尾以nil结尾代表没有更多对象(这就是不能存储nil的原因)。
NSArray*array = [NSArrayarrayWithObjects:@”one”,@”two”,@”three”,nil];
数组字面量格式创建NSArray:这种创建格式不用在结尾加上nil。
NSArray*array = @[@”one”,@”two”,@”three”];
获取数组包含的对象个数:count方法可以获取数组所包含的所有元素的个数
count方法的声明:
-(NSUInteger)count;
count方法的调用:
inta = [array count];
获取特定索引处的对象:使用objectAtIndex方法可以获取特定索引位置的对象的内容,索引不要大于数组本身的个数。
objectAtIndex方法的声明:
-(id)objectAtIndex:(NSUInteger)index;
objectAtIndex方法的调用:
NSString*a = [array objectAtIndex:1];
通过字面量访问数组:
id*myObject = array[1];
检查是否包含指定对象:
NSLog(@"isContains :%d", [array containsObject:@"obj"]);
查找某个对象所在索引:
NSLog(@"indexOfObject :%d",[array indexOfObject:@"obj"]);
显示最后一个元素:
NSLog(@"lastObejct :%@", [array lastObject]);
拆分数组:用componentsSeparatedByString方法以指定的内容拆分一串字符串为数组。
NSString*string = @”op:ack:bork:greeble:ponies”;
NSArray*array = [stringcomponentsSeparatedByString:@”:”];
合并数组:用componentsJoinedByString方法以指定内容衔接合并数组为字符串。
String= [array componentsJoinedByString:@”--”];
可变数组:类似于可变字符串,原始的NSArray是不可以创建之后被更改的,而它的子类NSMutableArray是在创建之后可以被更改的。
创建可变数组:通过arrayWithCapacity来创建可变数组,注意,没有可以用来创建NSMutableArray的字面量语法。
arrayWithCapacity的声明:
+(id)arrayWithCapacity:(NSUInteger)numItems;
创建:数组容量值只是一个参考
NSMutableArray*array = [NSMutableArray arrayWithCapacity:17];
在数组末尾添加变量:addObject方法用来在一个已经声明好的数组末尾添加变量。
addObject声明:
-(void)addObject:(id)anObject;
删除特定索引处的对象:可以用removeObjectAtIndex方法删除特定索引处的数组元素。
removeObjectAtIndex声明:
-(void)removeObjectAtIndex:(NSUInteger)index;
特定索引处插入对象:insertObject方法可以根据索引在相应位置插入数组元素。
[array insertObject:@"obj" atIndex:0];
替换对象:replaceObjectAtIndex方法可以根据给定的索引替换相应的对象。
[array replaceObjectAtIndex:0 withObject:@"obj"];
为数组排序:因为数组的排序好复杂,各种形式,单写。
枚举器NSEnumerator:Cocoa可以用它来表示集合中迭代的对象。通过调用objectEnumerator方法向数组请求枚举器。
objectEnumerator的声明:
-(NSEnumerator *)objectEnumerator;
请求下一项的声明:
-(id)nextObject;
循环代码:当nextObject返回nil的时候循环结束。还有就是不要通过枚举器进行数组的添加或删除,这样枚举器会发生混乱出错。
NSEnumerator*enumerator = [array objectEnumerator];
While(id thingie = [enumerator nextObject])
{
NSLog(@”Ifound %@”,thingie);
}
快速枚举:这是一个循环体,它将会历遍数组中的每一个元素,并用变量存储每个数组的值。
for(NSString *string in array)
{
NSLog(@”Ifound %@”,string);
}
通过代码块枚举对象:通过代码块可以让循环操作并发执行,而快速枚举则是一项项的线性完成。
代码块枚举的声明:
-(void)enumerateObjectsUsingBlock:(void (^)(id obj,NSUIntegeridx,BOOL *stop))block
重写枚举方式:
[arrayenumerateObjectUsingBlock:^(NSString *string,NSUInteger index,BOOL*stop){
NSLog(@”Ifound %@”,string);
}];
因为Objective-C的语法比较枯燥,所以我一边学习iOS开发一边学习Objective-C的基础语法,准备把iOS开发也写上来。加油!