NSArray:
只允许装OC对象,并且不能装空值,空代表数组元素的结束
//创建一个空数组
NSArray *array = [NSArray array];
//创建有一个元素的数组
array = [NSArray arrayWithObject:@"123"];
//创建有 多个元素的数组
array = [NSArray arrayWIthObjects:@"a",@"b",nil ];//不能装nil空值,空值代表数组元素结束
//获取元素的个数
int count = [array count]; //和 count = array.count; 相同,都是调用get方法
//是否包含一个元素
- (bool) containsObject:(id)anObject;
返回最后一个元素
- (id) lasObject;
//获取index位置的元素
- (id) objectAtIndex:(NSUInteger) index;
//获取元素的位置
- (NSUInteger) indexOfObject:(id)anObject;
//在range范围内查找元素的位置
- (NSUInteger) indexofObject:(id)anObject inRange:(NSRange)range;
//比较两个集合内容是否相同
- (Bool) isEqualToArray:(NSArray *)otherArray;
//返回两个集合中第一个相同的对象元素
- (id) firstObjectCommonWithArray:(NSArray *)otherArray;
//让集合里面的所有元素都执行aSelector这个方法
- (void) makeObjectsPerformSelector:(SEL)aSelector;
//让集合里面的所有元素都执行aSelector这个方法,给这个方法添加参数,但是只支持一个参数
- (void) makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument
NSArray:
//添加一个元素,返回一个新的数组(方法调用者本身没有发生变化)
- (NSArray *) arrayByAddingObject:(id)anObject
//添加otherArray的所有元素,返回一个新的NSArray(方法着本身没有改变)
- (NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray;
//截取range范围的数组
- (NSArray *) subarrayWithRange:(NSRenge)range;
//用separator做拼接符,拼接成一个字符串
- (NSString *) componentsJoinedByString:(NSString *)separator
//将NSArray持久化到文件中去
- (Bool) writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile
数组的内存管理;
如果把一个对象放到一个数组里面,改对象的计数器加一。也就是说数组会对他做一次retain操作
数组被销毁([array ralease])的时,会对内部所有的元素都做一次release操作
代码如下:
void * :d代表指向任何类型的指针
数组遍历:
方法一:普通遍历
方法二:快速遍历
方法三:利用block遍历
方法四:利用迭代器
NSEnumerator迭代器:
集合的迭代器,可以用于遍历集合元素
NSArray 有相应的方法来获取迭代器
//获取一个正序遍历的迭代器
- (NSEnumerator *) objectEnumerator;
//获取一个反序遍历的迭代器
- (NSEnumerator *) reverseObjectEnumerator;
NSEnumerator的常用方法:
//获取下一个元素
- (id) nextObject;
//获取所有的元素
- (NSArray *) allObjects
demo代码如下:
Student.h文件内容:
#import <Foundation/Foundation.h>
@interface Student : NSObject
+ (id)student;
- (void)test;
- (void)test2:(NSString *)str;
@end
Student.m文件内容:
#import "Student.h"
@implementation Student
+ (id)student{
return [[[Student alloc] init] autorelease];
}
-(void) test{
NSLog(@"%@ ->test",self);
}
-(void)test2:(NSString *)str{
NSLog(@"%@->test2 %@",self, str);
}
- (void)dealloc{
NSLog(@"%@ is destoryed", self);
[super dealloc];
}
@end
void arrayCreate(){
//create a null array
// NSArray *array = [NSArray array];
}
void arrayUse(){
NSObject *obj = [[NSObject alloc] init];
NSLog(@"obj:%@",obj);
NSArray *array = [NSArray arrayWithObjects:@"a", @"b",@"c", obj, nil];
NSString *last = [array lastObject];
NSLog(@"last :%@",last);
[obj release];
}
#pragma mark memory manager 数组的内存管理
void arrayMemory(){
Student *stu1 = [[Student alloc] init];
Student *stu2 = [[Student alloc] init];
Student *stu3 = [[Student alloc] init];
NSLog(@"stu1:%zi",[stu1 retainCount]); //1
NSArray *array = [[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil];
NSLog(@"stu1:%zi",[stu1 retainCount]);//2
NSLog(@"array count: %zi",[array count]);
[array release];
[stu1 release];
[stu2 release];
[stu3 release];
}
#pragma mark 给数组里的元素 发送消息
void arrayMessage(){
Student *stu1 = [Student student];
Student *stu2 = [Student student];
Student *stu3 = [Student student];
NSArray *array = [[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil];
// [array makeObjectsPerformSelector:@selector(test)];
//有参数,但是参数只能有一个
[array makeObjectsPerformSelector:@selector(test2:) withObject:@"123"];
[array release];
}
#pragma mark 普通遍历
void arrayFor1(){
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
int count = array.count;
for(int i=0; i<count; i++){
id obj = [array objectAtIndex:i];
NSLog(@"%i-%@",i, obj);
}
}
#pragma mark 快速遍历
void arrayFor2(){
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
int count = array.count;
int i=0;
for(id obj in array){
NSLog(@"%i-%@",i, obj);
i++;
}
}
#pragma mark 利用block遍历
void arrayFor3(){
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%zi->%@",idx, obj);
// *stop = YES; //改变外边的Bool,终止遍历
}];
}
#pragma mark 利用迭代器
void arrayFor4(){
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
NSEnumerator *enumerator = [array objectEnumerator];
//如果放到遍历之后,则取到空,原因是,遍历完了,就没值了
NSArray *array2 = [enumerator allObjects];
NSLog(@"array2:%@", array2);
//获取下一个需要遍历的元素
id obj = nil;
while (obj = [enumerator nextObject]) {
NSLog(@"obj=%@", obj);
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSLog(@"------array create--------");
arrayCreate();
NSLog(@"------array use-----------");
arrayUse();
NSLog(@"------array memory manager----");
arrayMemory();
NSLog(@"------array message----------");
arrayMessage();
NSLog(@"------array for---------");
arrayFor1();
NSLog(@"------array for2--------");
arrayFor2();
NSLog(@"------array for3---------");
arrayFor3();
NSLog(@"------array for4---------");
arrayFor4();
}
return 0;
}