objective-c 基础教程 读书笔记之第八章集合家族简介,NSArray,NSDictionary

一:数组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");

}

   


  





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值