三种集合类来收集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",@"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",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",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",nil];
[array addobject:@"Four"];
NSLog(@"array:%@",array);
-----删除数组中指定索引处对象-----
//-(voID) removeObjectAtIndex: (unsigned) index;
//NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",nil];
[array removeObjectAtIndex:1];
NSLog(@"array:%@",array);
----- 数组枚举-----
//1、- (NSEnumerator *)objectEnumerator; //从前向后
//NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",nil];
NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
ID thingIE;
while (thingIE = [enumerator nextObject]) {
NSLog(@"thingIE:%@",thingIE);
}
//2、- (NSEnumerator *)reverSEObjectEnumerator; //从后向前
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",nil];
NSEnumerator *enumerator;
enumerator = [array reverSEObjectEnumerator];
ID object;
while (object = [enumerator nextObject]) {
NSLog(@"object:%@",object);
}
//3、快速枚举
//NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"One",nil];
for(Nsstring *string in array)
{
NSLog(@"string:%@",string);
}
----- NSValue(对任何对象进行包装)-----
//将NSRect放入NSArray中
NSMutableArray *array = [[NSMutableArray alloc] init];
NSValue *value;
CGRect rect = CGRectMake(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];
NSMutableArray* objectsArray = [[NSMutableArray alloc] init];
[objectsArray addobject:p1];
NSLog(@"p1 count:%d",[p1 retainCount]);//输出 2,也就是执行追加对象后,对象的计数器也被加1
//[p1 release];
//NSLog(@"p1 count:%d",[p1 retainCount]);
//同样做数组替换时
[objectsArray replaceObjectAtIndex:0 withObject:p2];
NSLog(@"p2 count:%d",[p2 retainCount]);//输出 2,同样也是2
NSLog(@"p1 count:%d",[p1 retainCount]);//输出 1,对象p1仍然存在
//[p2 release];
//NSLog(@"p2 count:%d",[p2 retainCount]);
//执行清空数组
[objectsArray removeAllObjects];
NSLog(@"p2 count:%d",[p2 retainCount]);//输出 1,对象p2仍然存在
//[p2 release];
@H_956_419@由此可知,每次执行上面的数组 *** 作后,要执行对象release,如上面注释中的语句,才能保证内存不泄露。
NSSet
Unordered collection of objects.
Immutable. You cannot add or remove objects to it once it’s created.
important methods:
+ setWithObjects:(ID)firstObj,...; // nil terminated
- (BOol)containsObject:(ID)anObject;
- (ID)anyObject;
- (voID)makeObjectsPerformSelector:(SEL)aSelector;
- (ID)member:(ID)anObject; // uses isEqual: and returns a matching object (if any)
NSMutableSet
Mutable version of NSSet.
+ (NSMutableSet *)set; - (voID)addobject:(ID)anObject;
- (voID)removeObject:(ID)anObject; - (voID)removeAllObjects;
- (voID)unionSet:(NSSet *)otherSet;
- (voID)minusSet:(NSSet *)otherSet;
- (voID)intersectSet:(NSSet *)otherSet;
NSDictionary
key-value,key-value,..... 一系列键值对。 key(键)在整个dictionary是唯一的,通过key可以查询其对应的一个或多个value(值)。 Hash table. Look up objects using a key to get a value.
Immutable. You cannot add or remove objects to it once it’s created.
Keys are objects which must implement. Keys are usually Nsstring objects.
- (NSUInteger)hash & - (BOol)isEqual:(NSObject *)obj
important methods:
+ dictionaryWithObjectsAndKeys: (ID)firstObject,...; - (int)count;
- (ID)objectForKey:(ID)key;
- (NSArray *)allKeys;
- (NSArray *)allValues; -----创建字典 -----
//- (ID) initWithObjectsAndKeys;
//NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"One",@"1",@"2",@"3",nil];
Nsstring *string = [dictionary objectForKey:@"One"];
NSLog(@"string:%@",string);
NSLog(@"dictionary:%@",dictionary);
[dictionary release];
Mutable version of NSDictionary.
+ (NSMutableDictionary *)dictionary; - (voID)setobject:(ID)anObject forKey:(ID)key;
- (voID)removeObjectForKey:(ID)key; - (voID)removeAllObjects;
- (voID)addEntrIEsFromDictionary:(NSDictionary *)otherDictionary; -----创建可变字典 -----
//创建
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
//添加字典
[dictionary setobject:@"One" forKey:@"1"];
[dictionary setobject:@"Two" forKey:@"2"];
[dictionary setobject:@"Three" forKey:@"3"];
[dictionary setobject:@"Four" forKey:@"4"];
NSLog(@"dictionary:%@",dictionary);
//删除指定的字典 [dictionary removeObjectForKey:@"3"]; NSLog(@"dictionary:%@",dictionary); 总结
以上是内存溢出为你收集整理的NSArray,NSSet,NSDictionary总结全部内容,希望文章能够帮你解决NSArray,NSSet,NSDictionary总结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)