本节书摘来自华章出版社《编写高质量代码:改善Objective-C程序的61个建议》一 书中的第2章,作者:刘一道,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
NSDictionary不是仅仅维持对象有序或无序的集合,它根据给定键来存储对象,然后可以用于检索。使用字符串对象作为字典的键,这是最佳的做法,如图2-9所示。
也可以使用其他对象作为键,但要注意,字典使用的每个键都是可以复制的,因此其必须支持NSCopying。如果希望能够使用键–值编码,正如《键–值编码编程指南》中所介绍的,必须使用字符串键的字典对象。使用字典将对象储存为键–值对,即标识符(键)和对象(值)对。字典是无序集,因为键–值对可采用任何顺序。尽管键几乎可以是任何内容,但通常是描述值的字符串,如 NSFileModificationDate 或 UIApplicationStatusBarFrameUserInfoKey(为字符串常量)。存在公共键时,字典是在对象之间传递各种信息的绝佳方式。
创建字典NSDictionary 类通过初始化程序和类工厂方法,提供了多种创建字典的方法,但只有两个类方法特别常用:dictionaryWithObjects:forKeys: 和 dictionaryWithObjectsAndKeys:(或它们对应的初始化程序)。使用前一种方法时,传入对象数组和键数组;键在位置上与其值匹配。使用第二种方法时,指定第一个对象值及其键,第二个对象值及其键,依此类推;使用 nil 标记此对象序列的结尾。 // First create an array of keys and a complementary array of values NSArray *keyArray = [NSArray arrayWithObjects:@"IssueDate", @"IssueName", @"IssueIcon", nil]; NSArray *valueArray = [NSArray arrayWithObjects:[NSDate date], @"Numerology Today",self.currentIssueIcon, nil]; // Create a dictionary, passing in the key array and value array NSDictionary *dictionaryOne = [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray]; // Create a dictionary by alternating value and key and terminating with nil NSDictionary *dictionaryTwo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSDate date], @"IssueDate", @"Numerology Today", @"IssueName", self.currentIssueIcon, @"IssueIcon", nil];如同数组,创建 NSDictionary 对象时,可使用容器字面常量 @{key :value, …},其中“…”表示任意数量的键-值对。例如,以下代码创建含3个键-值对的不可变字典对象:
NSDictionary *myDictionary = @{ @"name" :NSUserName(), @"date" :[NSDate date], @"processInfo" :[NSProcessInfo processInfo] }; 访问字典中的对象通过调用 objectForKey: 方法并将键指定为参数,访问字典中的对象值。 NSDate *date = [dictionaryTwo objectForKey:@"IssueDate"];还可以使用下标访问字典中的对象,键出现在方括号内(方括号紧接在字典变量后面)。
NSString *theName = myDictionary[@"name"]; 管理可变字典通过调用 setObject:forKey:和 removeObjectForKey: 方法,在可变字典中插入和删除项目。setObject:forKey: 方法替换给定键的任何现有值。这些方法都很快捷。还可以使用下标,将键-值对添加到可变字典中。键下标位于赋值左侧,而值位于右侧。
NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc] init]; mutableDict[@"name"] = @"John Doe";要点(1)字典不仅可以作为无序对象的集合,还可以作为有序对象的集合。(2)字典可作为有序对象的集合,主要依赖于键值可采用有序。(3)存在公共键时,字典是在对象之间传递各种信息的绝佳方式。
相关资源:敏捷开发V1.0.pptx