容器类对象:枚举 NSEnumerator、字典

本文详细介绍了Cocoa编程中的容器类对象,包括NSEnumerator的枚举操作,强调了在遍历可变数组时不应修改数组。接着探讨了NSDictionary的高效查询特性,以及如何创建和操作字典,特别是`objectForKey:`方法的使用。同时,提到了创建可变字典`NSMutableDictionary`的方法,如`setObject:forKey:`和`removeObjectForKey:`。文章还提及了Cocoa中的类簇概念,并建议避免对基础集合类进行子类化。
摘要由CSDN通过智能技术生成

一、枚举:NSEnumerator

  • 依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口。
  • NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有项
  • 对可变数组进行枚举操作时,不能通过添加或删除对象这类方式来改变数组容器。

创建枚举:向容器类对象请求枚举器

-(NSEnumerator *)objectEnumerator;

代码实例:

    NSEnumerator *enumerator;
    enumerator =[array objectEnumerator];


浏览集合类对象的全部元素 

-(id)nextObject;

代码实例:

    NSEnumerator *enumerator;
    enumerator =[array objectEnumerator];
    id thingie;
    while (thingie = [enumerator nextObject])
    {
        NSLog(@"i found %@",thingie);
    }

二、字典NSDictionary

字典就是关键字及其定义的集合,也称散列表或关联数组。

是在给定关键字(常为NSString类型的对象)下存储一个数值(任何类型的对象)。

使用键查询的优化存储方式,可立即找出要查询的数据,不需遍历整个数组进行查询。

对于频繁查询和大型数据集来说,使用字典比较数组要快很多。

创建字典:

+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...(可变参) 

需提供该字典所需要的全部对象和关键字,因为只有可读属性,只能在初始化的时候进行赋值。

获取字典中的值:

- (id)objectForKey:(id)aKey;


三、创建 NSMutableDictionary

向类发送dictionary消息

+ (id)dictionaryWithCapacity:(NSUInteger)numItems;

仅仅是一个建议,而不是对大小的限制

添加元素:

- (void)setObject:(id)anObject forKey:(id)aKey;

若已经存在关键字,则用新值替换原有的值。

删除元素:

- (void)removeObjectForKey:(id)aKey;


类簇(cu)

注意:


不要创建NSString,NSArray,NSDictionary的子类。

在cocoa中,许多类实际上是以类簇的方式实现的,即他们是一群隐藏在通用接口之下的与实现相关的类。


本章总结:

掌握数组的基本操作

掌握可变数组的基本操作

掌握枚举的基本操作

了解快速枚举的基本操作

掌握字典的基本操作

掌握可变字典的基本操作


代码:

#import <Foundation/Foundation.h>

@interface Tire : NSObject {

}
@end

@implementation Tire

@end

int main (int argc, const char * argv[])
{
    //字符串变数组
    NSString *string = [[NSString alloc]initWithString:@"one,two"];
    NSLog(@"string:%@",string);
    
    NSArray *array = [string componentsSeparatedByString:@","];
    NSLog(@"array:%@",array);
    
    [string release];
   //数组变字符串
    NSString *string1 = [array componentsJoinedByString:@","];
    NSLog(@"string1:%@",string1);
    
    [string1 release];
    
    //枚举
    NSEnumerator *enumerator;
    enumerator =[array objectEnumerator];
    id thingie;
    while (thingie = [enumerator nextObject])
    {
        NSLog(@"i found %@",thingie);
    }
    
    Tire *tires[4];
    for(int i=0;i<4;i++)
        tires[i] = [Tire new];
    
    //字典
    NSDictionary *tire;
    tire = [NSDictionary dictionaryWithObjectsAndKeys:
                                                    tires[1],@"1",
                                                    tires[2],@"2",
                                                    tires[3],@"3",
                                                    tires[0],@"4",
                                                    nil];
    
    //可变字典
    NSMutableDictionary *kbdtire;
    kbdtire = [NSMutableDictionary dictionary];//?????
    
    [kbdtire setObject:tires[0] forKey:@"0"];//添加元素
    [kbdtire setObject:tires[1] forKey:@"1"];
    [kbdtire setObject:tires[2] forKey:@"2"];
    [kbdtire setObject:tires[3] forKey:@"3"];
    
    [kbdtire removeObjectForKey:@"0"];//删除元素
    
    return 0;
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值