OC之【NSDictionary详解】

原创 2013年12月01日 21:07:47

main.m文件


#import <Foundation/Foundation.h>

#import "Student.h"


#pragma mark 字典的初始化

void dictCreate() {

    // NSDictionary是不可变的

    NSDictionary *dict = [NSDictionarydictionaryWithObject:@"v"forKey:@"k"];

    

    //最常用的初始化方式

    dict = [NSDictionarydictionaryWithObjectsAndKeys:

           @"v1", @"k1",

           @"v2", @"k2",

           @"v3", @"k3",nil];

    

   NSArray *objects = [NSArrayarrayWithObjects:@"v1",@"v2", @"v3",nil];

   NSArray *keys = [NSArrayarrayWithObjects:@"k1",@"k2", @"k3",nil];

    dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];

   NSLog(@"%@", dict);

}


#pragma mark 字典的基本用法

void dictUse() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

           @"v1", @"k1",

           @"v2", @"k2",

           @"v3", @"k3",nil];

    

    // count是计算有多少个键值对(key-value)

   NSLog(@"count=%zi", dict.count);

    

    //由于NSDictionary是不可变的,所以只能取值,而不能修改值

   id obj = [dict objectForKey:@"k2"];

   NSLog(@"obj=%@", obj);

    

    //将字典写入文件中

    NSString *path =@"/Users/apple/Desktop/dictionary.xml";

    [dict writeToFile:pathatomically:YES];

    

    //从文件中读取内容

    dict = [NSDictionarydictionaryWithContentsOfFile:path];

   NSLog(@"dict=%@", dict);

}


#pragma mark 字典的用法

void dictUse2() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    // 返回所有的key

   NSArray *keys = [dict allKeys];

    //NSLog(@"keys=%@", keys);

    

   NSArray *objects = [dict allValues];

    //NSLog(@"objects=%@", objects);

    

    // 根据多个key取出对应的多个value

    // key找不到对应的value时,用marker参数值代替

    objects = [dict objectsForKeys:[NSArrayarrayWithObjects:@"k1",@"k2", @"k4", nil]notFoundMarker:@"not-found"];

   NSLog(@"objects=%@", objects);

}


#pragma mark 遍历字典

void dictFor() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    // 遍历字典的所有key

   for (id keyin dict) {

       id value = [dict objectForKey:key];

       NSLog(@"%@=%@", key, value);

    }

}


#pragma mark 遍历字典2

void dictFor2() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    // key迭代器

   NSEnumerator *enumer = [dict keyEnumerator];

   id key = nil;

   while ( key = [enumer nextObject]) {

       id value = [dict objectForKey:key];

       NSLog(@"%@=%@", key, value);

    }

    

    // 对象迭代器

    // [dict objectEnumerator];

}


#pragma mark 遍历字典3

void dictFor3() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    [dict enumerateKeysAndObjectsUsingBlock:

     ^(id key,id obj, BOOL *stop) {

       NSLog(@"%@=%@", key, obj);

    }];

}


#pragma mark 

void dictMemory() {

   Student *stu1 = [StudentstudentWithName:@"stu1"];

   Student *stu2 = [StudentstudentWithName:@"stu2"];

   Student *stu3 = [StudentstudentWithName:@"stu3"];

    

    //一个对象称为字典的key或者value时,会做一次retain操作,也就是计数器会+1

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                          stu1,@"k1",

                          stu2,@"k2",

                          stu3,@"k3", nil];

    

    //当字典被销毁时,里面的所有keyvalue都会做一次release操作,也就是计数器会-1

}


int main(int argc,const char * argv[])

{

    @autoreleasepool {

       dictMemory();

    }

   return 0;

}



Student.h文件

#import <Foundation/Foundation.h>


@interface Student :NSObject

@property (nonatomic,retain) NSString *name;


+ (id)studentWithName:(NSString *)name;

@end



Student.m文件

#import "Student.h"


@implementation Student


+ (id)studentWithName:(NSString *)name {

   Student *stu = [[Studentalloc] init];

    stu.name = name;

   return [stu autorelease];

}


- (void)dealloc {

   NSLog(@"%@被销毁了", _name);

    // 释放name

    [_namerelease];

    [superdealloc];

}

@end


版权声明:本文为博主原创文章,未经博主允许不得转载。

OC NSDictionary 的常用方法

//老王小贴士快捷方式提高效率神器 @ + esc     //可变的不建议使用     NSArray *array = @[@"1",@"2"];     NSDictionary ...
  • qq_30402119
  • qq_30402119
  • 2015年08月11日 16:12
  • 1026

【OC学习-19】NSDictionary字典对象的初始化以及常用操作方法归纳

字典主要特征是一对一对的key和value组成,它的分类以及针对元素的操作和NSString以及NSArray的都差不多。重点在于了解一遍,具体做项目时再加深理解。...
  • wsb200514
  • wsb200514
  • 2014年09月05日 15:26
  • 3003

OC中集合与java中集合的比较(2)NSDictionary

oc中的有序集合NSDictionary与NSMutableDictionary 两者的区别在于一个是可变的一个是不可变的他们都是键值对应的一个key 对应一个value,这里的key具有唯一性,这与...
  • FL_14
  • FL_14
  • 2015年04月20日 14:02
  • 723

OC教程07-字典NSDictionary详解

字典是我们常见的数据类型,在Java中对应的是HashMap * 字典:又称键值对,通过一个key可以访问他的值 * 分类:NSDictionary不可变字典...
  • yangbingbinga
  • yangbingbinga
  • 2015年06月04日 16:23
  • 1841

[X-Code7新功能之一]OC的泛型支持

[X-Code7新功能之一]OC的泛型支持
  • liyanq528
  • liyanq528
  • 2016年04月05日 21:37
  • 2803

探讨OC中字典的存储方式

为什么要写这个文档? 我在重温OC的字典类型时,发现了setValue:把值设为nil之后字典中会自动删除这个关键字指向的键值对。于是,我突然有了一个想法,在字典中可以存在多个相同的变量值,但是关键字...
  • qq_25276029
  • qq_25276029
  • 2015年03月01日 23:04
  • 1791

【IOS开发】NSArray,NSDictionary数据的保存

保存数据的步骤: 1.新建一个保存数据的路径 2.将数据写入对应的路径 基本函数简介: ①NSString * NSHomeDirectory ( void ); ...
  • misakahina
  • misakahina
  • 2015年03月30日 13:45
  • 2115

关于iOS打印NSDictionary中文字符出现乱码

想想就觉得很坑,今天一直被字符编码的问题所困扰,上午刚刚解决了服务器PHP的编码问题,不过下午开发iOS客户端时又遇到了字符编码问题,这让我很困扰:PHP提供的借口URL,浏览器访问时返回的中文不乱码...
  • weichuang_1
  • weichuang_1
  • 2015年09月11日 23:43
  • 1562

OC 解决NSArray、NSDictionary直接打印中文出现乱码的问题

OC 解决NSArray、NSDictionary直接打印中文出现乱码的问题 在iOS开发中,经常需要查看数组中得元素是否是自己想要的,但是苹果并没有对直接打印数组中得中文作处理,直接打印就...
  • miaoshichang
  • miaoshichang
  • 2015年01月15日 15:30
  • 1074

OC中语法糖,最新语法总结

1.方法与顺序无关 2.枚举绑定数据类型 enum { ObjectiveC, Java, ...
  • u010774394
  • u010774394
  • 2014年08月13日 23:00
  • 1213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC之【NSDictionary详解】
举报原因:
原因补充:

(最多只允许输入30个字)