黑马程序员技术交流社区
标题:
OC学习笔记15--Foundation之NSArray与NSMutableArray常用方法
[打印本页]
作者:
wowthe1st
时间:
2015-8-6 14:51
标题:
OC学习笔记15--Foundation之NSArray与NSMutableArray常用方法
适合有java和C基础的同学迅速了解OC
#import <Foundation/Foundation.h>
int main()
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
//数组几种创建方式:
NSArray *ary1,*ary2,*ary3;
// 由于NSArray对象是长度固定的,初始化时就必须赋值
ary1=[NSArray arrayWithObjects:
@"ary1",[NSNumber numberWithInteger:111],
[[[NSObject alloc] init] autorelease],@"over",nil];
// 将Cary转换成OCary
id cAry[]={@"ary2",[NSNumber numberWithInteger:222],
[[[NSObject alloc] init] autorelease],@"over"};
ary2=[NSArray arrayWithObjects:cAry count:4];
// @方式创建对象
ary3=@[@"ary3",[NSNumber numberWithInteger:333],
[[[NSObject alloc] init] autorelease],@"over"];
//数组几种遍历方式:
void (^enumAryBlock)(id,NSUInteger,BOOL *);
enumAryBlock=^(id obj,NSUInteger idx,BOOL *stop)
{
NSLog(@"index=%d,ele=%@",idx,obj);
if(idx==2) *stop=1;
};
// for循环遍历
int i;
for(i=0;i<[ary1 count];i++)
{
BOOL stop=0;
enumAryBlock([ary1 objectAtIndex:i],i,&stop);
if(stop) break;
}
//for each 遍历
for(id obj in ary2)
{
BOOL stop=0;
enumAryBlock(obj,[ary2 indexOfObject:obj],&stop);
if(stop) break;
}
// 对象方法遍历
[ary2 enumerateObjectsUsingBlock:enumAryBlock];
// 创建一个长度可变的OC数组
NSMutableArray *mary=[NSMutableArray array];
// 将ary1中所有元素添加至mary
[mary addObjectsFromArray:ary1];
NSLog(@"mary=%@",mary);
[mary removeObjectAtIndex:3];
// 交换下标 1和2元素的位置
[mary exchangeObjectAtIndex:1 withObjectAtIndex:2];
// 替换下标为0的元素
[mary replaceObjectAtIndex:0 withObject:@"replacement"];
NSLog(@"mary=%@",mary);
[pool drain];
return 0;
}
复制代码
概括:
OC中集合只能存放OC对象
NSArray为长度不可变数组,即无法进行增删改操作,不允许元素为空,
其子类NSMutableString为长度可变,也不允许元素为空
NSArray 常用方法:
注:
为方便开发者,苹果官方为OC提供了许多编译器特性(语法糖),
如ARC、点语法、@方式创建对象、[index]方式访问OC数组等,
都为编译器特性,其本质是在编译过程中编译器为其添加必要的
代码或转换成调用相应方法进行处理;
常用的创建方法:
//创建一个长度为0的OC数组,由于NSArray长度不可变,创建为0长度后
//就无法使用,所以该方法一般用于NSMutableArray
+ (id)array;
//将动态个数的对象保存为一个数组,对象不能为空,
//最后必须以nil结尾,表示数组结束,OC数组内存中最后一个元素之后存放0
+ (id)arrayWithObjects:(id)obj,...,nil;
//将存放OC对象的C数组转换成OC数组
+ (id)arrayWithObjects:(const id[])objs count:(NSUInteger)count;
@创建方式:
// 实质为调用对象创建的类方法创建,因此返回的也是autorelease过的
//@开头创建的对象为不可变的NSArray
NSArray ary= @[id,id,...];
//返回数组长度
-(unsigned long)count;
// 返回下标位置对象,也可以使用 ary[index]方式访问,实质也是调用该方法
-(id)objectAtIndex:(NSUInteger)index;
// 返回对象所在下标
-(NSUInteger)indexOfObject:(id)obj;
//是否包含
-(BOOL)containsObject:(id)obj;
// 利用block遍历数组
-(void)enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop)block;
NSMutableArray 常用方法:
// 将另一个OC数组中所有元素添加进来
-(void)addObjectsFromArray:(NSArray *)from;
-(void)addObject:(id)obj;
-(void)removeAllObjects;
-(void)removeObject:(id)obj;
-(void)removeObjectAtIndex:(NSUInteger)idx;
//交换两个位置上的元素
-(void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
// 替换某个位置上的元素
-(void)replaceObjectAtIndex:(NSUInteger)idx withObject:(id)obj;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2