`
xupf1977
  • 浏览: 7535 次
  • 性别: Icon_minigender_1
  • 来自: 温哥华
最近访客 更多访客>>
社区版块
存档分类
最新评论

Cocoa 的容器[转载自cocoachina.com]

阅读更多
容器是让多数程序员又爱又恨的东西。在Cocoa中,容器是如此的简单易用以至于您一旦用过,就会对它们“爱不释手”。Cocoa中的容器类主要有这么几个:NSString、NSArray、NSDictionary、NSSet和NSIndexSet等,它们都是Foundation Framework的一部分。

为什么人们会对Cocoa的容器“爱不释手”呢?

原因一:NSArray、NSDictionary、NSSet都不强制其内部元素类型的一致性。举个简单的例子:

NSString *aString = [NSString stringWithString:@"This is a demo."];

NSNumber *aNumber = [NSNumber numberWithInteger:0];

NSArray *anArray = [[NSArray alloc] initWithObjects:aString, aNumber, nil];

在上述例子中,我们首先建立了一个NSString对象,然后又建立了一个NSNumber对象,最后我们将这两个NSString和NSNumber对象都“塞”到了一个NSArray对象中。

有够爽吧?连想都别想,什么东西都能往里面装(基本类型、结构体除外)!

原因二:容器类的“可修改”和“不可修改”



上面我们展示的NSString、NSArray、NSDictionary、NSSet以及NSIndexSet等,都是容器的“不可修改”的版本。所谓的“不可修改”,指的是这个容器一旦被创建以后,我们就不可以通过代码修改它的集合。那如果我们需要修改(例如添加、删除、替换)这些容器的元素,该怎么办呢?

Cocoa中几乎所有的容器类,都提供了另外一个“可修改”的版本。例如:继承自NSString的NSMutableString、继承自NSArray的NSMutableArray、继承自NSDictionary的NSMutableDictioanry、继承自NSSet的NSMutableSet以及继承自NSIndexSet的NSMutableIndexSet等。这些“可修改”的版本提供了简单直观的方法,用来修改其内部的元素。例如:

NSString *aString = [NSString stringWithString:@"This is a demo."];

NSNumber *aNumber = [NSNumber numberWithInteger:0]; 

NSMutableArray *aMutableArray = [NSMutableArray array];

[aMutableArray addObject:aString];

[aMutableArray addObject:aNumber];

[aMutableArray removeObjectAtIndex:0];

[aMutableArray removeAllObjects];

在上述代码中,第一、二行建立了一个NSString对象和一个NSNumber对象。第三行建立了一个NSMutableArray对象(也就是一个“可修改”的NSArray对象)。第四、五行通过-addObject:方法分别将第一、二行建立的NSString对象和NSNumber对象加入了这个“可修改”的NSArray里。第六行则是根据我们给定的索引号0,删除了数组中的第一个元素。第七行的-removeAllObjects最后一口气将数组中存在的所有元素统统删除(置空数组)。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics