一:数组NSArray
NSArray可以存储任何objective-c的对象。当然对于int,float这些对象无法保存,另外nil对象也不能保存。
+ (id)arrayWithObjects:(id)firstObj, ...这个是产生一个数组的通常方法。
通过索引获取数组中的一个对象。- (id)objectAtIndex:(NSUInteger)index
遍历数组,会通过下面的例子来说明:
NSArray * array = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
NSString * tmp = [array objectAtIndex:2];
//遍历数组
for (NSString * string in array) {
NSLog(@"array:%@",string);
}
二:可变数组:
跟NSString和NSMutableString的关系一样,如果需要对数组的值进行删除或者重置操作,需要用到可变数组 NSMutableArray。
+ (id)arrayWithCapacity:(NSUInteger)numItems 创建一个指定初始化长度的数组。
- (void)addObject:(id)anObject 添加一个元素。
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index 在指定位置添加一个元素。
- (void)removeObjectAtIndex:(NSUInteger)index 删除一个数组元素。
这里注意一点的是创建数组指定的参数并不是说数组的最大容量,系统只是根据这个值来分配一个初始的内存大小,如果有更多的元素,只管加就是了,下面的例子演示了添加更多的元素是完全ok的。
NSMutableArray * array2 = [NSMutableArray arrayWithCapacity:3];
for (int i=0; i<5; i++)
{
NSString * test = [NSString stringWithFormat:@"object %d",i];
[array2 addObject:test];
}
for (NSString * tmp in array2)
{
NSLog(@"array:%@",tmp);
}
输出:
array:object 0
array:object 1
array:object 2
array:object 3
array:object 4
上面的例子中,初始化指定的长度是3,我们实际添加了5个元素。
三:NSDictionary和NSMutableDictionary。字典又称散列表或者关联数组
不用我说,你大概就明白了,NSMutableDictionary 于NSDictionary的区别是可变。
dictionaryWithObjectsAndKeys: 创建一个字典。
- (id)objectForKey:(id)aKey 获取相应关键字的值。
NSMutableDictionary常用的几个函数:
+ dictionaryWithCapacity: 创建一个字典
setObject:forKey: 增加一个元素,若该key存在,则替换
removeObjectForKey: 删除一个元素。
四:如何往NSArray和NSDictionary中添加基本类型数据。
我们说了,NSArray和NSDictionary只能保存对象,不能保存基本数据类型,如int,float,或者struct,要保存这些的话,就需要对其进行封装一下:
这里介绍两个封装类:
1:NSNumber。
+ numberWithChar:
+ numberWithFloat:
+ numberWithInt:
+ numberWithBool:
对应的获得方法:
– charValue
– floatValue
– intValue
– boolValue
例子:
NSNumber * number;
number = [NSNumber numberWithInt:34];
[array addObject:number];
2:NSValue
通常用来包装NSSzie,NSRect,NSPoint,和你自己创建的struct。
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type 创建一个value。
传递的第一个参数是你想要包装数值的地址。第二个参数是描述这个数据类型的字符串,不需要自己来想这个头痛的参数,使用@encode指令就ok了。
例子:
NSMutableArray * array2 = [NSMutableArray arrayWithCapacity:3];
CGRect rect = CGRectMake(1,2,30,50);
CGRect rect = CGRectMake(1,2,30,50);
NSValue * value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect) ];
[array2 addObject:value]; NSValue * tmpValue = [array2 lastObject];
CGRect tmpRect;
CGRect tmp2Rect;
[tmpValue getValue:&tmpRect];
tmp2Rect = [tmpValue CGRectValue ];
NSLog(@"Rect width:%@",tmpRect.size.width);
五:NSNull
不能在NSArray和NSDictionary中放入nil值。有些时候,确实没值放入,怎么办呢,那就使用NSNull。例子:
NSMutableDictionary * profile = [NSMutableDictionary dictionaryWithCapacity:3];
[profile setObject:[NSNull null] forKey:@"phoneNumber"];
id number = [profile objectForKey:@"phoneNumber"];
if(number == [NSNull null]){
NSLog(@"the value is nil");
}