您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> ios >> 正文

ios中NSArray,NSSet,NSDictionary总结

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  三种集合类来收集cocoa对象(NSObject对象):

  NSArray 用于对象有序集合(相当于是数组)

  NSSet 用于对象无序集合

  NSDictionary用于键值映射

  以上三种集合类是不可变的(一旦初始化后,就不能改变)

  以下是对应的三种可变集合类(这三种可变集合类是对应上面三种集合类的子类):

  NSMutableArray

  NSMutableSet

  NSMutableDictionary

  注:这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int, float, double, BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。

  NSArray

  Ordered collection of objects. Immutable. You cannot add or remove objects to it once it’s created.

  Important methods:

  + (id)arrayWithObjects:(id)firstObject, ...; // nil terminated

  - (int)count;

  - (id)objectAtIndex:(int)index; // NSString *s1=[[myarray objectAtIndex: 0];

  - (void)makeObjectsPerformSelector:(SEL)aSelector;

  - (NSArray *)sortedArrayUsingSelector:(SEL)aSelector;

  - (id)lastObject; // returns nil if there are no objects in the array (convenient)

  注:

  类方法arrayWithObjects 可以创建an autoreleased NSArray of the items.例如

  @implementation MyObject

  - (NSArray *)coolCats {

  return [NSArray arrayWithObjects:@“Steve”, @“Ankush”, @“Sean”, nil];

  }

  @end

  Other convenient create with methods (all return autoreleased objects):

  [NSString stringWithFormat:@“Meaning of %@ is %d”, @“life”, 42];

  [NSDictionary dictionaryWithObjectsAndKeys:ankush, @“TA”, janestudent, @“Student”, nil];

  [NSArray arrayWithContentsOfFile:(NSString *)path];

  -----创建数组 -----

  //NSArray *array = [[NSArray alloc] initWithObjects:

  @"One",@"Two",@"Three",@"Four",nil];

  self.dataArray = array;

  [array release];

  //- (unsigned) Count;数组所包含对象个数;

  NSLog(@"self.dataArray cound:%d",[self.dataArray count]);

  //- (id) objectAtIndex: (unsigned int) index;获取指定索引处的对象;

  NSLog(@"self.dataArray cound 2:%@",[self.dataArray objectAtIndex:2]);

  ------ 从一个数组拷贝数据到另一数组(可变数级) -------

  //arrayWithArray:

  //NSArray *array1 = [[NSArray alloc] init];

  NSMutableArray *MutableArray = [[NSMutableArray alloc] init];

  NSArray *array = [NSArray arrayWithObjects:

  @"a",@"b",@"c",nil];

  NSLog(@"array:%@",array);

  MutableArray = [NSMutableArray arrayWithArray:array];

  NSLog(@"MutableArray:%@",MutableArray);

  array1 = [NSArray arrayWithArray:array];

  NSLog(@"array1:%@",array1);

  //Copy

  //id obj;

  NSMutableArray *newArray = [[NSMutableArray alloc] init];

  NSArray *oldArray = [NSArray arrayWithObjects:

  @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];

  NSLog(@"oldArray:%@",oldArray);

  for(int i = 0; i < [oldArray count]; i++)

  {

  obj = [[oldArray objectAtIndex:i] copy];

  [newArray addObject: obj];

  }

  //

  NSLog(@"newArray:%@", newArray);

  [newArray release];

  //快速枚举

  //NSMutableArray *newArray = [[NSMutableArray alloc] init];

  NSArray *oldArray = [NSArray arrayWithObjects:

  @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];

  NSLog(@"oldArray:%@",oldArray);

  for(id obj in oldArray)

  {

  [newArray addObject: obj];

  }

  //

  NSLog(@"newArray:%@", newArray);

  [newArray release];

  //Deep copy

  //NSMutableArray *newArray = [[NSMutableArray alloc] init];

  NSArray *oldArray = [NSArray arrayWithObjects:

  @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];

  NSLog(@"oldArray:%@",oldArray);

  newArray = (NSMutableArray*)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef)oldArray, kCFPropertyListMutableContainers);

  NSLog(@"newArray:%@", newArray);

  [newArray release];

  //Copy and sort

  //NSMutableArray *newArray = [[NSMutableArray alloc] init];

  NSArray *oldArray = [NSArray arrayWithObjects:

  NSMutableArray

  Mutable version of NSArray.

  - (void)addObject:(id)anObject;

  - (void)insertObject:(id)anObject atIndex:(int)index;

  - (void)removeObjectAtIndex:(int)index;

  - (void)removeAllObjects;

  -----给数组分配容量-----

  //NSArray *array;

  array = [NSMutableArray arrayWithCapacity:20];

  -----在数组末尾添加对象-----

  //- (void) addObject: (id) anObject;

  //NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];

  [array addObject:@"Four"];

  NSLog(@"array:%@",array);

  -----删除数组中指定索引处对象-----

  //-(void) removeObjectAtIndex: (unsigned) index;

  //NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];

  [array removeObjectAtIndex:1];

  NSLog(@"array:%@",array);

  ----- 数组枚举-----

  //1、- (NSEnumerator *)objectEnumerator; //从前向后

  //NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];

  NSEnumerator *enumerator;

  enumerator = [array objectEnumerator];

  id thingie;

  while (thingie = [enumerator nextObject]) {

  NSLog(@"thingie:%@",thingie);

  }

  //2、- (NSEnumerator *)reverseObjectEnumerator; //从后向前

  //NSMutableArray *array = [NSMutableArray arrayWithObjects:

  @"One",@"Two",@"Three",nil];

  NSEnumerator *enumerator;

  enumerator = [array reverseObjectEnumerator];

  id object;

  while (object = [enumerator nextObject]) {

  NSLog(@"object:%@",object);

  }

  //3、快速枚举

  //NSMutableArray *array = [NSMutableArray arrayWithObjects:

  @"One",@"Two",@"Three",nil];

  for(NSString *string in array)

  {

  NSLog(@"string:%@",string);

  }

  ----- NSValue(对任何对象进行包装)-----

  //将NSRect放入NSArray中

  NSMutableArray *array = [[NSMutableArray alloc] init];

  NSValue *value;

  CGRect rect = CGRectMake(0, 0, 320, 480);

  value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)];

  [array addObject:value];

  NSLog(@"array:%@",array);

  //从Array中 提取

  value = [array objectAtIndex:0];

  [value getValue:&rect];

  NSLog(@"value:%@",value);

  ----★使用NSMutableArray要防止内存泄露★------

  NSObject* p1 = [[NSObject alloc] init];

  NSObject* p2 = [[NSObject alloc] init];

  NSMu