1 // 2 // main.m 3 // NSDictionary 4 // 5 // Created by dingxiaowei on 13-5-15. 6 // Copyright (c) 2013年 dingxiaowei. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import "Student.h" 11 #pragma mark - 字典的创建 12 void dicCreate(){ 13 //NSDictionary一旦创建是不可变的 可变的是NSMutableDictionary 14 //创建一个键值对 15 NSDictionary *dic=[NSDictionary dictionaryWithObject:@"dingxiaowei" forKey:@"10141303"]; //只能放OC对象,不能放基本数据类型 注意:不能处理中文 16 //创建多个键值对(最常用的初始化方法) 17 dic=[NSDictionary dictionaryWithObjectsAndKeys:@"cl",@"10141301", 18 @"cey",@"10141302", 19 @"dxw",@"10141303", nil]; 20 //其他创建方法 21 NSArray *objs=[NSArray arrayWithObjects:@"v1",@"v2",@"v3", nil]; 22 NSArray *keys=[NSArray arrayWithObjects:@"k1",@"k2",@"k3", nil]; 23 dic=[NSDictionary dictionaryWithObjects:objs forKeys:keys]; 24 NSLog(@"字典是:%@",dic); 25 } 26 #pragma mark - 字典的用法 27 void dicUse(){ 28 //创建多个键值对(最常用的初始化方法) 29 NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys: 30 @"v1",@"k1", 31 @"cey",@"10141302", 32 @"dxw",@"10141303", nil]; 33 NSLog(@"count:%zi",[dic count]); 34 //由于NSDictionary是不可变的,所以一旦创建只能查询,不能更改 35 id obj=[dic objectForKey:@"k1"]; 36 NSLog(@"k1-%@",obj); 37 38 //将字典写入文件中 39 NSString *path=@"/Users/dingxiaowei/Desktop/dictionary.xml"; 40 if([dic writeToFile:path atomically:YES]){ 41 NSLog(@"字典写入到文件成功"); 42 } 43 //读取xml的字典文件 44 dic=[NSDictionary dictionaryWithContentsOfFile:path]; 45 NSLog(@"文件读取成功\ndic:%@",dic); 46 47 //返回所有的keys和values 48 NSArray *keys=[dic allKeys]; 49 NSArray *values=[dic allValues]; 50 NSLog(@"所有的keys是:%@\n所有的值是:%@",keys,values); 51 52 //查询一个value对于的多个key 53 dic=[NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v1",@"k3",nil]; 54 keys=[dic allKeysForObject:@"v1"]; 55 NSLog(@"keys:%@",keys); 56 57 //根据多个key取出对于的value 58 //注意:当key找不到对于的value时候,就用marker来代替 59 NSArray *array1=[NSArray array]; 60 array1=[dic objectsForKeys:[NSArray arrayWithObjects:@"k1",@"k2", @"k4",nil] notFoundMarker:@"not-found"];//如果找不到对于的object 就用marker代替 比如这儿没有k4 61 NSLog(@"找到的值%@",array1); 62 } 63 #pragma mark - 遍历字典 64 void dicFor(){ 65 //初始化字典 66 NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil]; 67 //遍历字典所有的key 68 for (id key in dic) { 69 id value=[dic objectForKey:key]; 70 NSLog(@"普通遍历:%@-%@",key,value); 71 } 72 73 //key迭代器遍历 74 NSEnumerator *enumer=[dic keyEnumerator]; 75 id key=nil; 76 while (key=[enumer nextObject]) { 77 id value=[dic objectForKey:key]; 78 NSLog(@"key迭代器遍历:%@-%@",key,value); 79 } 80 81 //value迭代器 82 //对象迭代器 83 //[dic objectEnumerator]; 84 85 //lblock遍历(每调遍历一次键值就调用一次block 86 [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 87 NSLog(@"block迭代器遍历:%@-%@",key,obj); 88 }]; 89 } 90 #pragma mark - 字典的内存管理 91 void dicMemory(){ 92 Student *stu1=[Student studentWithName:@"cl"]; 93 Student *stu2=[Student studentWithName:@"cey"]; 94 Student *stu3=[Student studentWithName:@"dxw"]; 95 //字典会自动销毁,一般静态创建的对象都不需要我们自己释放,自动释放的时候会对key和value对象进行一次release操作 96 NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:stu1,@"k1",stu2,@"k2",stu3,@"k3",nil]; //注意:把一个对象塞给字典时会进行一次retain时候 97 /*[stu1 retain]; 98 [stu2 retain]; 99 [stu3 retain];*/ 100 101 102 NSLog(@"dic%@",dic); 103 } 104 105 int main(int argc, const char * argv[]) 106 { 107 108 @autoreleasepool { 109 110 //dicCreate(); 111 //dicUse(); 112 //dicFor(); 113 dicMemory(); 114 } 115 return 0; 116 }
Student.h
1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject 4 @property(nonatomic,retain)NSString *name; 5 +(id)studentWithName:(NSString *)name; 6 @end
Student.m
1 #import "Student.h" 2 3 @implementation Student 4 5 6 +(id)studentWithName:(NSString *)name{ 7 Student *stu=[[[Student alloc] init] autorelease]; 8 stu.name=name; 9 return stu; 10 } 11 12 -(NSString *)description{ 13 return _name; 14 } 15 16 -(void)dealloc{ 17 NSLog(@"名字为%@被销毁了",_name); 18 [_name release]; 19 [super dealloc]; 20 } 21 22 @end
本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366495,如需转载请自行联系原作者